2017-03-08 79 views
0

所以我有這個IIFE,爲了和其他ES6類一致,我重寫了一個插件,我也想用ES6 Class語法重寫這個。任何人都可以告訴我該怎麼做?如何將這個IIFE重寫爲ES6類?

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);

使用class syntax

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);

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

它使用'Foo'既是類的全局名稱和類中的局部功能是非常令人困惑。 – Barmar

+1

IIFE只是返回一個公共成員的函數。 IIFE沒有優勢,它可以轉換爲普通函數聲明和屬性分配,沒有任何問題。 JavaScript中沒有類(ECMAScript)。有些函數可以是構造函數。 – RobG

+1

有一個'class'聲明,它是用於定義所有相關函數和對象的ES6語法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – Barmar

回答

0

由IIFE創建的函數可以使用純函數聲明和屬性賦值來一樣好創建

可惜我不能真正運行這段代碼的網站,我目前有Firefox和IE的國有企業版本不承認語法。所以如果有問題請更新。

2

這將是一個簡單的

class Foo { 
    constructor(a, b) { 
     this.a = a; 
     this.b = b; 
    } 
    static bar(a, b) { 
     return new this(a, b); 
    } 
}