2017-03-08 3 views
0

ES6で次のクラスを考える:ES6方法の内側と外側のコンストラクタ - ノックアウト

class Test { 
    constructor() { 
    this.foo =() => console.log('Hello World'); 
    } 

    bar() { 
    console.log('Hello World') 
    } 
} 

fooとbarの違いは何ですか?私はthis(this.foo、this.bar)で両方を呼び出すことができます。しかし、knockoutJSでこの構文を使用すると、Knockoutはbar()を見つけることができません。

class Test2 { 
    constructor() { 
    this.foo =() => this.foo(); // endless loop 
    } 

    foo() { 
    console.log('Hello World') 
    } 
} 

、これは理にかなっているかどうかは知りませんが、私はあなたがTest2で見ることができるものを持っているしたいと思います。主に、ノックアウトアプリケーションにオーバーライド機能を追加したいと考えています。 Test1から延長してfooを上書きすると、super.foo()に電話することはできません。

私の目標は、クラス継承を有効にしながら、 'this'に特別に割り当てられた機能(たとえば、添付/廃棄)をオーバーライドできるようにすることです。

編集:回避策として、私はこのように扱うことができます。

class Test3 { 
    constructor() { 
    this.foo =() => _foo(); 
    } 

    _foo() { 
    console.log('Hello World') 
    } 
} 

これは私がノックアウトでFOOを使用できるようにすると、まだ_fooを使用して、それを上書きすることができることになります。

+0

'this 'なしで' foo() 'または' _foo()を呼び出すと、参照エラーになります。無限ループではありません – Bergi

+0

私は' this.foo() – Frame91

答えて

1

fooとbarの違いは何ですか?ノックアウトは、言語発達と最新ではないよう

)私はknockoutJSでこの構文を使用する場合は、ノックアウトは(バーを見つけることができないUse of 'prototype' vs. 'this' in JavaScript?

を参照してくださいに見えます。 classで定義されているメソッドは、列挙できません。アクセス方法については、ES6 Iterate over class methodsを参照してください。

私の目標は、クラス継承を有効にしながら、 'this'に特別に割り当てられた機能(たとえば、attach/dispose)をオーバーライドできるようにすることです。

いつでもthis.foo = this.foo.bind(this);を実行できます。

関連する問題