2017-07-21 9 views
0

に変数メソッドを追加し、あなたがメソッドを宣言することができます。次のようにES6クラスでES6クラス

class Foo { 

    bar() {} 

} 

をしかし、私は外部ファイルからメソッドをインポートし、クラスにロードする必要があります。このようなもの:

const barMethod = require('./bar'); 

class Foo { 

    bar: barMethod 

} 

ただし、これは機能しません。私はこの構文のためにしばらくの間見てきましたが、実際に言及されていません。これを行う正しい方法は何ですか?


おそらくクラスを拡張する方法はありますか?クラスはとても大きいので、私は編成目的でいくつかのファイルに分割していますが、それぞれのメソッドはthisのクラスを参照できる必要があります。

おそらくミックスインですか?

+0

クラスを別の方法で分割する必要があるかもしれません。機能性を包含するより小さなクラスもあります。 'Foo.prototype.bar = require( './ bar')'と書くことは可能ですが、今はテストできません。 –

答えて

2

classはまだ.prototypeを使用していますメソッドを `.prototype。

オリジナル宣言:

class Foo { 
    bar() {} 
} 

いくつかの新しいメソッドを追加します。

Foo.prototype.newBar = someNewMethod; 

あるいは、よりモジュラーな方法で、おそらくあなたはそれで各モジュールにFooを渡したいモジュールのコンストラクタだしメソッドをFoo.prototypeに追加するだけです。

または、各モジュールは独自のメソッドセット(最終的にはFooメソッドになるように設計されています)を定義してから、すべてのサブ定義をインポートして各メソッドインポートされたクラスのメインFooクラスプロトタイプを1つのマスタークラスにする

メソッドは、クラスがES6 class構文で宣言されている場合でも、プロトタイプオブジェクトの関数にすぎません。オブジェクトのプロパティでのみ動作する通常のJavascriptで他のオブジェクトに割り当てられます。

+0

私は実際にこれを知らなかった!プロトタイプよりも全く新しい実装だと思った! – dthree

+0

@dthree - ES6の 'class'キーワードは、プロトタイプに物を載せるための素晴らしい構文です。基本的な実装はまだ同じです。 – jfriend00

+0

@dthree - これはあなたの質問に答えましたか? – jfriend00

0

オプションでthisthisを設定し、Fooインスタンスbarプロパティから.call()barMethodをすることができます:あなたが追加することにより、その宣言の後にクラス定義を拡張することができるようにFooインスタンスES6で

class Foo { 
    bar() { 
    barMethod.call(this) 
    } 
} 
+0

それは考えです。残念ながら、私は50の関数のようにインポートする必要があります。クラスを拡張する行には何かがありますか?編集された質問。 – dthree

+0

@dthree何らかのコードを組み立てる必要があります。利用できるいくつかのアプローチがある。 JavaScript関数を作成し、 'Foo'を' this'に設定してオブジェクトを返すだけでも、オブジェクトの配列を使って 'Foo'インスタンスのプロパティを設定することもできます。let foo = Object.assign(new Foo()、.. {{bar:function {} {console.log(123、this)}}、{fn:function(){console.log( "abc"、this)}}}]; foo.bar() ' – guest271314