2017-10-07 5 views
0

私はかなり離れた場所に値を隠し、あなたがそれを単独で操作できるコンテナのかなり簡単な例を持っています。クラス構文を使用してJavascriptコンストラクタとプロトタイプオブジェクトを複製する方法

このオブジェクトの基本構造を.prototypeからクラス構文に変換しました。しかし、例では、このオブジェクトの新しいインスタンスを作成するためのファンキーな方法を使用していますし、私はクラスの構文でそれを複製する方法を見つけ出すことはできません(以下のコードを参照してください)

const Container = function(x) { 
    this.val = x 
} 

Container.prototype.map = function(f) { 
    return Container.of(f(this.val)) 
} 

Container.of = function(x) { return new Container(x) } // Problem spot 

これは(クラス構文)に変換:

class Container { 
    constructor(x) { 
    this.val = x 
    } 

    map(f) { 
    return Container.of(f(this.val)) 
    } 

    of = (x) => {      // ???????? 
    return new Container(x) 
    } 
} 

「of」メソッドは、「コンテナ」の単一の元のインスタンスに単純にバインドされていて、スピンするたびに「新規」を記述しなくても簡単にできると考えていますこのクラスのインスタンスを作成します。しかし、私はどのようにクラスの構文でそのようなバインディングを複製するかを理解することはできません。

classe独自のメソッドの1つから独自のクラスをインスタンス化することは不可能ですか?

答えて

1

この関数を単にstaticと宣言してください。

class Container { 
    constructor(x) { 
    this.val = x 
    } 

    map(f) { 
    return Container.of(f(this.val)) 
    } 

    static of(x) {      // ???????? 
    return new Container(x) 
    } 
} 
+0

完全に作業しました。ありがとう、これは私が今までに得た中で最も速く最も効果的な対応です。 – MFave

+0

@Maaveダニエルの答えを受け入れてください。乾杯! :) –

関連する問題