![](/img/trans.png)
[英]How can I reference a javascript object through a property's onclick method?
[英]How can I reference a `this` property within a method of `this`?
我this
附加了一個services
屬性:
function Client(){
this.services = {
'propertyName' : {}
};
然后向this
附加一個方法,其中我需要引用client
實例的services
屬性:
function Client(){
this.services = {
'propertyName' : {}
};
this.someMethod = function () {
if (this.services['propertyName']) {
//do something
}
}
}
var clientName = new Client();
但是this.services - line 6
是未定義的。 我如何使用分配給的屬性this
分配給一個方法this
? 看起來應該是可能的,因為當構造函數調用該方法時,該對象的services
屬性將存在。 這是語言限制嗎? 是否可以? 應該是嗎?
但是 this.services - 第 6 行是未定義的。
這將完全取決於您如何調用someMethod
。 如果你這樣稱呼它:
clientName.someMethod();
...這會很好,因為調用中的this
將是由您已將services
屬性置於其上的new Client
創建的對象。 但是在 JavaScript 中, this
對於普通函數來說並不是固定的,它取決於您如何調用函數。 所以:
var f = clientName.someMethod;
f();
...會失敗,因為this
不是您期望的對象。 (這不是ES6的新的“箭頭”的功能,它獲得真正的this
從他們那里定義,而不是如何他們是所謂的。)
當函數用作回調時,您通常會看到這一點:
doSomething(clientName.someMethod);
...因為doSomething
不知道使用什么對象作為this
。
您可以使用Function#bind
修復它:
doSomething(clientName.someMethod.bind(clientName));
或類似:
var f = clientName.someMethod.bind(clientName);
f();
Function#bind
創建一個新函數,當調用該函數時,將使用this
設置調用原始函數為您提供的參數。
只是為了充實我上面的 ES6 評論:在 ES6 中,如果你有:
function Client(){
this.services = {
'propertyName' : {}
};
this.someMethod = () => { // <== ES6 "arrow" function
if (this.services['propertyName']) {
//do something
}
}
}
...你如何調用someMethod
並不重要, this
將是創建該函數的地方。 五、方便。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.