簡體   English   中英

如何在“this”方法中引用“this”屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM