2013-03-20 62 views
0

在這個例子中:這是指什麼?爲什麼?

var A = {test: 1, foo: function() { return this.test }} 

爲什麼A.foo()回報1(至少在node.js中)?我以爲this將被綁定到外部呼叫者this,不是嗎?

+0

爲什麼這指的是對象?我不完全明白爲什麼...... – Shouvik 2013-03-20 03:43:44

+0

爲什麼=理由,規則是什麼。 – Mitar 2013-03-20 04:04:08

+0

[這是指在JavaScript私有方法中引用的]可能的重複(http://stackoverflow.com/questions/2259721/what-does-this-refer-to-in-a-javascript-private-method) – Shoe 2013-03-20 08:45:55

回答

5

當您撥打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

1

在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)()