2017-02-21 38 views
0

私はかなり新しいjavascriptを使用しています。(非常に古い)コードをもう少しモダンなものにリファクタリングすると、このようなものになりました。javacriptメンバー関数の中からメンバ関数を呼び出す

var MyClass = function(parms} {/*stuff*/} 
MyClass.prototype = { 
    this_func(p1, p2) { /* do this */ }, 
    that_func(args) { /* do that */ } 
}; 

note ES6 classというキーワードはありませんが、使用可能になるとすぐに使用するようにしたいと考えています。私はthat_func内側からthis_funcを呼びたいと、私はこのゆがみ

that_func(args) { 
    //this.this_func(parm1, parm2) causes an error 
    myClass.prototype.this_func.call(this, parm1, parm2); 
} 

これを行う簡単な方法がありますで終わるために管理しているとき

問題が来ますか?そして私が完全なes6を得るとき、私はちょうどthis.this_funcを使用できるでしょうか?

私はこのサイト上の既存の質問を見てきたし、それらのどれもが本当に私がやっている(あるいは、少なくともではない方法で、私は私の問題にマッピングすることができます)

明確化するもの網羅するように見えるん - クラスはこの

var myInstance = new MyClass(); 
myInstance.that_func('xxx'); 

のように使用し、私はthis_func

+1

今すぐ 'this.this_func'を使用できるはずです。それはそれが働くことになっている方法です –

+0

しかし、私はあなたがプロトタイプ関数を間違っていると宣言していると思います。実際のコードを表示できますか? –

+0

Brendanは少年だったので、それがうまくいった方法です。 –

答えて

0
(私は今起因する問題のコードから長い道のりであることに、現時点では思い出すことができない)が知られていないというエラーを取得しています

thisは、電流インスタンス。クラスがnew MyClass(...)で正しくインスタンス化されていれば、プロトタイプチェーンが自動的に設定されます。これはprototypeオブジェクトの目的です。

それは

MyClass.prototype = { 
    this_func(p1, p2) {...}, 
    that_func(args) { 
     this.this_func(...); 
    } 
}; 

する必要がありますあなたは「ES6クラスのキーワードを用意していない」の場合、バベルはES5にES6コードをtranspileするために使用することができます。これが本来の目的です。

+0

はい、それがエラーになります。これが私が投稿した理由です質問 –

+0

いいえ、[それはありません](https://jsfiddle.net/dbkjeetL/)。 – estus

0

まあ、トレースとロギングを追加した後に見つかりました。今日、私はあなたが別の関数の中に関数を持っている場合、その内部関数の中でthisの値が変化するので、ある意味では 'class'インスタンスに属していないことを発見しました。

関連する問題