2016-10-23 8 views
1

は、私はthisは、そのインスタンスおよび例となりますmethodAへの呼び出し(this.propA)を実行できるようにしたいのですが、クラスとそのインスタンスGetメソッドのインスタンス所有者

var class=function() { 
    this.propA=99; 
    this.methodA=function() { 
     console.log(this.propA); 
    }; 
}; 

var object=new Class(); 

をします考えます作業。正確

object.methodA.call(object); 

しかしとしてobjectへの参照を持たず。いくつかのpseoducodeで、次のように:

var methodToCall=object.methodA; 
... 
... 
methodToCall.call(getInstanceOwnerOf(methodToCall)); 

これの目的は、コールバックが機能を非同期およびメソッドが呼び出されたときにインスタンスとしてthisを維持するような方法を渡すことです。

methodobjectをその非同期関数に渡すか、thisをローカル変数に格納することがありますが、これは避けたいものです。

+4

機能は、 "所有者" を持っていません。関数がオブジェクトプロパティに関連付けられているという事実には、固有の意味や意義はありません。関数プロトタイプの '.bind()'を使って、固定 'this '束縛を持つ関数を作成する*ことができます。 – Pointy

答えて

1

関数を呼び出すコンテキストにバインドするbindを使用します。これは、元のものと同じではないNEW関数を返します。

私は通常、新しい関数を作成し、別の名前を付けますが、複数の方法で行うことができます。

より具体的には、thisが関数が宣言されたクラスであることを確認することはできません。関数の呼び出し方法や厳密なモードであるかどうかによって異なります。以下

例:

フィドル:https://jsfiddle.net/f7af535L/

class SomeClass { 
    constructor(someVar) { 
    this.myVar = someVar; 
    this.publicSayVar = this.sayVar.bind(this); 
    } 

    sayVar() { 
    console.log(this.myVar); 
    } 


} 

var object = new SomeClass("hello"); 
var testcall = object.publicSayVar; 
testcall(); 
関連する問題