在這個例子中:這是指什麼?爲什麼?
var A = {test: 1, foo: function() { return this.test }}
爲什麼A.foo()
回報1
(至少在node.js中)?我以爲this
將被綁定到外部呼叫者this
,不是嗎?
在這個例子中:這是指什麼?爲什麼?
var A = {test: 1, foo: function() { return this.test }}
爲什麼A.foo()
回報1
(至少在node.js中)?我以爲this
將被綁定到外部呼叫者this
,不是嗎?
當您撥打A.foo()
,內foo()
設置爲對象A
,因爲這就是你所說的功能。因此,this.test
的值爲1
。
您可以使用.call()
or .apply()
更改引用this
的內容。
A.foo.call(newThisValue);
至於爲什麼......這給你很大的靈活性。你可能有一個函數作用於this
做些事情,JavaScript的構建方式允許你以特定的方式將該函數應用於任何object
。這有點難以描述,但它在諸如inheritance等情況下派上用場。另請參閱:http://trephine.org/t/index.php?title=JavaScript_call_and_apply
在Javascript中使用whenever you call a function使用obj.method()
表示法,this
將被綁定到obj
。
您可以解決此通過拆分呼叫分成兩個單獨的步驟:
var f = A.foo;
f(); // "this" will not be A in this case.
或者濫用逗號操作符:
(17, x.f)()
爲什麼這指的是對象?我不完全明白爲什麼...... – Shouvik 2013-03-20 03:43:44
爲什麼=理由,規則是什麼。 – Mitar 2013-03-20 04:04:08
[這是指在JavaScript私有方法中引用的]可能的重複(http://stackoverflow.com/questions/2259721/what-does-this-refer-to-in-a-javascript-private-method) – Shoe 2013-03-20 08:45:55