2015-01-16 5 views
7

Mit einer JavaScript ‚Klasse‘ Breaking up (nicht wirklich eine Klasse, ich weiß), dann ist es möglich, eine große Definition, indem sie Methoden in separaten Dateien, wie diese zu brechen:eine ES6 Klasse in mehrere Dateien

var Foo = function() { 
    console.log('initializing foo'); 
}; 

Foo.prototype.render = require('./render'); 

Aber mit ES6-Klassen sieht es so aus, als ob die Syntax diesen Ansatz ausschließt - es scheint, dass die Methoden immer als Funktionsliterale innerhalb des Klassenblocks geschrieben werden müssen.

I tried this im 6to5 REPL:

class Foo { 
    constructor() { 
    console.log('initializing foo'); 
    } 

    require('./render'); 
} 

... aber es Fehler.

Als Beispiel ermöglicht Coffeescript Klasse Syntax mir, dies zu tun:

class Foo 
    constructor: -> 
    console.log 'initializing foo' 

    render: require './render' 

Gibt es wirklich keine Möglichkeit, dies mit ES6 Klassen zu tun?

Antwort

8

Klassen sind nur syntaktischer Zucker. So können Sie tun

class Foo { 
    constructor() { 
    console.log('initializing foo'); 
    } 
} 

Foo.prototype.render = require('./render'); 

Oder Sie könnten einen Getter erstellen:

class Foo { 
    constructor() { 
    console.log('initializing foo'); 
    } 

    get render() { 
    return require('./render'); 
    } 
} 
+0

Was über den Zugriff auf 'this' innerhalb dieser Methoden? –

+0

@NathanH: was ist damit? Abgesehen von den Pfeilfunktionen hängt der Wert von "this" davon ab, wie eine Funktion * aufgerufen wird und nicht wie sie erstellt wurde. –

+0

Danke Ich denke das war es, ich benutzte wahrscheinlich die Pfeilsyntax. –

1

Was ist damit?

class Foo { 
    constructor() { 
    console.log('initializing foo'); 
    } 

    render() { 
    require('./render'); 
    } 
}