2017-10-19 20 views
0

うまくいけば、これは簡単な答えです。オブジェクトの内部からメソッドを呼び出そうとしていますが、コンソールは関数が関数ではないというエラーを投げています。オブジェクト内の内部関数を呼び出す

function tabs(el, data){ 
    this.el = el; 

    this.addTab = function(data){ 
     console.log("addTab", this.el, data); 
    }; 

    data.forEach(function(data){ 
     this.addTab(data); 
    }); 
} 

私はそうのように、最初は私のオブジェクトを呼び出しています:

var t = new tabs("tabs", []); 

私のエラーは、addTabが関数ではないということです。

答えて

1

各機能には、それ自身のコンテキストがあり、その中にはthisという参照があります。 forEachに渡した関数のコンテキストは、オブジェクト自体を参照するものではありません。したがって、現在のオブジェクトを参照するために関数のコンテキストを保持する必要があります。関数の宣言をarrow functionに変更して、外部コンテキストを保持します。

function tabs(el, data){ 
    this.el = el; 

    this.addTab = function(data){ 
     console.log("addTab", this.el, data); 
    }; 

    data.forEach((data) => { 
     this.addTab(data); 
    }); 
} 
+0

* why *の違いについて説明すると、より良い回答になります。 – Quentin

+0

ありがとう。私は、矢印機能の追加機能を認識していませんでした。私は元のコード内でも、なぜ動作しませんaddTab(とthis.addTabではない)を使用していますか? –

+0

'addTab'は現在のオブジェクトにバインドされているためです。だからあなたはそれから 'addTab'を呼び出すよりもそのオブジェクトを見つける必要があります –

関連する問題