不同的函數調用方式
方法調用模式
A= {
a:'a vairalbe',
B: function() {
//
}
}
A.B();
這種調用模式中,B函數中的this指向調用它的對象,A
函數調用模式
var A = function ()
{
var a = 'a variable';
var B = function() {
///
};
B();
};
A();
在這種情況下,B中的this並不指向其外層函數this變量,而是指向全局對象。這是js語言設計上的一個錯誤,會爲開發帶來很多麻煩,有一種方法,來改善這一問題。我們創建一個變量,來手動指向外層函數的this變量。 myObject.double = function() {
var that = this;//解決方法
var helper = function() {
that.value = add(that.value, that, value);
};
helper();
};
myObject.double();
document.writeln(myObject.value);//6
構造器調用模式
由於很多人還是習慣基於類的對象,而js是基於原型的對象,因此js提供了一套類似於基於類的語言的對象構建語法,通過new 關鍵字創建對象。Apply調用模式
減少全局變量污染
var MYAPP = {};//唯一的全局變量
MYAPP.stooge = {
firstName: 'joe',
lastName: 'Howard'
};
MYAPP.flight = {
airline: 'Oceanic',
number: 815,
departure: {
IATA:'SYD',
TIME: '2004-09-22 14:55',
}
};