2017-03-08 3 views
0

Also ich habe diese IIFE, und aus Gründen der Konsistenz mit anderen ES6-Klassen habe ich für ein Plugin umgeschrieben, ich möchte dies auch in ES6-Klasse-Syntax umschreiben. Kann mir jemand zeigen, wie es geht?Wie umschreiben Sie dieses IIFE in eine ES6-Klasse?

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

ist Es ist sehr verwirrend mit 'foo' als auch dem globalen Namen der Klasse und einer lokale Funktion innerhalb der Klasse. – Barmar

+1

Das IIFE gibt einfach eine Funktion mit einem einzelnen öffentlichen Mitglied zurück. Das IIFE wird nicht ausgenutzt, es kann ohne Probleme in eine einfache Funktionsdeklaration und eine Eigenschaftszuweisung umgewandelt werden. Es gibt keine Klassen in Javascript (ECMAScript). Es gibt Funktionen, die Konstruktoren sein können. – RobG

+1

Es gibt eine 'class' Deklaration, die ES6 Syntax für die Definition aller verwandten Funktionen und Objekte ist: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – Barmar

Antwort

0

Die durch die IIFE geschaffene Funktion genausogut sein kann mit einer einfachen Funktionsdeklaration und Eigenschaftszuweisung erstellt:

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

die class syntax Verwendung:

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

Leider kann ich nicht wirklich diesen Code als Standort betreibe ich aktuell bin hat SOE-Versionen von Firefox und IE, die die Klasse Syntax nicht erkennen. Also bitte updaten, wenn es fehlerhaft ist.

2

Es wäre ein einfaches

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