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;
})();
它使用'Foo'既是類的全局名稱和類中的局部功能是非常令人困惑。 – Barmar
IIFE只是返回一個公共成員的函數。 IIFE沒有優勢,它可以轉換爲普通函數聲明和屬性分配,沒有任何問題。 JavaScript中沒有類(ECMAScript)。有些函數可以是構造函數。 – RobG
有一個'class'聲明,它是用於定義所有相關函數和對象的ES6語法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – Barmar