1. 程式人生 > >JavaScript 面向物件之一 —— 物件(物件的方法)

JavaScript 面向物件之一 —— 物件(物件的方法)

本系列文章根據《愛前端邵山歡老師深入淺出的js面向物件》視訊整理歸納

物件的方法

如果一個物件的屬性值是一個函式,我們稱這個屬性為這個物件的方法(method)。

var obj = {
    name : "張鑫",
    sex : "男",
    sayHello:function(){
        alert("你好");
    }
}
obj.sayHello();   //  你好

上面例子中的物件有一個屬性 sayHello,它的值是一個匿名函式,我們把這個 sayHello 叫做 obj 的方法。
我們可以用點語法來呼叫這個屬性,並用圓括號去執行它。

函式的上下文(context),即函式裡面的this是誰(this指向)。

當一個函式被當做物件的方法呼叫時,這個函式裡的this表示這個物件:

var obj = {
    myName : "張鑫",
    sex : "男",
    sayHello:function(){
        alert("你好,我叫" + this.myName);
    }
}
obj.sayHello();   // 你好,我叫張鑫

上述例子中,我們是通過 obj 的點語法來呼叫的 sayHello 函式,所有 sayHello 函式的上下文就是 obj 物件,即 sayHello 函式內部的 this 指向 obj 。

但是,千萬不要認為寫在物件函式裡面的函式,上下文一定是這個物件。如:

var obj = {
    myName : "張鑫",
    sex : "男",
    sayHello:function(){
        alert("你好,我叫" + this.myName);
    }
}
var fn = obj.sayHello;   
fn();   // 你好,我叫undefined

函式的上下文是什麼,取決於函式是如何呼叫的(即呼叫者是誰),而不是函式是如何定義的(即在哪裡定義)。

函式的上下文是函式在呼叫時表現的性質,而不是在定義時表現的性質。

如:

var
obj = { myName : "張鑫", sex : "男", sayHello:function(){ alert("你好,我叫" + this.myName); } } var myName = "Mr.zhang"; var fn = obj.sayHello; fn(); // 你好,我叫Mr.zhang

此時,fn() 等同於 window.fn(),而

var myName = "Mr.zhang";

等同於

var window.myName = "Mr.zhang";