JavaScript 面向物件之一 —— 物件(物件的方法)
阿新 • • 發佈:2018-11-09
本系列文章根據《愛前端邵山歡老師深入淺出的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";