的this
值設置隱含取決於的函數是如何調用,有三種情況,其中發生這種情況:
當無基座對象,或一個非參考參考被調用:
myFn(); // the myFn reference has no base object
(function() {})(); // non-reference
的this
值將指向全局對象
當引用包含基礎對象,例如:
myObj.method();
method
內的this
值將指向myObj
。
當使用new
操作者:
var obj = new Foo();
的Foo
函數內的this
值,將指向一個新創建的對象,從Foo.prototype
繼承。
的this
值也可以設置明確,通過使用call
和apply
方法,例如,與call
:
function test(a) {
return alert(this + a);
}
test.call("hello", " world"); // alerts "hello world"
或用apply
如果我們需要 「申請」 一個從數組到參數的參數集:
function test(a, b) {
return alert(this + a + b);
}
var args = ["my ", "world "];
test.apply("hello ", args); // alerts "hello my world"
[1]這改變了在新ECMAScript 5th Strict Mode,現在當與沒有基礎對象,或一個非參考函數引用被調用(作爲第一情況),this
值將包含undefined
。
這是因爲使用構造函數時,人們經常在調用構造函數時忘記使用new
運算符。
發生這種情況時,this
值指向全局對象,並最終添加了不需要的全局屬性。
現在嚴格的模式,this
將包含不確定,如果財產查找,就可以了(this.foo = 'foo'
)由我們會有的,而不是具有全局foo
屬性不錯TypeError
例外。
來源
2010-11-19 07:45:29
CMS
在這個例子中'this'沒有提及任何東西,因爲這些函數都沒有被執行。這個取決於函數的調用方式。 – deceze 2010-11-19 07:47:17