2017-03-08 20 views
0

私はこのIIFEを持っています。他のES6クラスとの一貫性のために、私はプラグインのために書き直しました。また、これをES6クラス構文を使用して書き直したいと思います。誰も私にそれを行う方法を示すことができますか?このIIFEをES6クラスに書き換える方法は?

class Foo { 
 
    constructor(a, b) { 
 
    this.a = a; 
 
    this.b = b; 
 
    } 
 

 
    static bar(a, b){ 
 
    baz = new this(a, b); 
 
    return baz; 
 
    } 
 
} 
 

 
var foo = new Foo('FooA','FooB'); 
 
console.log(foo.a + ':' + foo.b); 
 

 
var baz = Foo.bar('BazA', 'BazB'); 
 
console.log(baz.a + ':' + baz.b);
class syntaxを使用

function Foo(a, b) { 
 
    this.a = a; 
 
    this.b = b; 
 
} 
 

 
Foo.bar = function(a, b) { 
 
    baz = new this(a, b); 
 
    return baz; 
 
} 
 

 
var foo = new Foo('FooA', 'FooB'); 
 
console.log(foo.a + ':' + foo.b); 
 

 
var baz = Foo.bar('BazA', 'BazB'); 
 
console.log(baz.a + ':' + baz.b);

Foo = (function(){ 
    Foo.bar = function(a, b){ 
     baz = new this(a, b); 

     return baz; 
    } 

    function Foo(a, b){ 
     this.a = a; 
     this.b = b; 
    } 

    return Foo; 

})(); 
+1

だろう。 – Barmar

+1

IIFEは、単一のパブリックメンバーを持つ関数を返します。 IIFEのメリットはありません。問題なく、単純な関数宣言とプロパティの割り当てに変換できます。 javascript(ECMAScript)にクラスはありません。コンストラクタになることができる関数があります。 – RobG

+1

関連するすべての関数とオブジェクトを定義するためのES6構文である 'class'宣言があります:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – Barmar

答えて

0

生命維持することによって作成された関数は、ちょうど同様に、プレーン関数宣言とプロパティ割り当てを使用して作成することができます

私は現在、上のよサイトがクラス構文を認識しないのFirefoxとIEのSOEのバージョンを持っているとして、残念ながら、私は実際にこのコードを実行することはできません。だから間違っている場合は更新してください。

2

それは、クラスのグローバル名とクラス内のローカル機能の両方として `Foo`を使用して非常に紛らわしいですシンプル

class Foo { 
    constructor(a, b) { 
     this.a = a; 
     this.b = b; 
    } 
    static bar(a, b) { 
     return new this(a, b); 
    } 
} 
関連する問題