2016-11-10 10 views
0

Ich arbeite an einem Knotenmodul, und ich möchte für Stil Konsistenz mit es6 Klassen Syntax halten, aber ich dieses Muster gefunden, die ich nicht wiedergeben kann:Javascript es6 Klasse Syntaxmuster

const proto = module.exports = function(options) { 
    man.opts = options || {}; 
    function man(sentence) { 
     man.say(sentence); 
    } 

    man.__proto__ = proto; 
    man.age = 29; 
    man.say = function(sentence) { 
     console.log(sentence); 
    }; 
    return man; 
}; 

Die seltsame Die Sache dieser Funktion ist, dass ich es als Standardkonstruktor bezeichnen kann und einen Mann mit seinen Methoden und Requisiten bekomme, aber ich kann auch den Menschen als eine Funktion bezeichnen und bekomme das gleiche Ergebnis wie seine Methode "Sag" zu nennen. Grundsätzlich erzeugt man ('text') den gleichen Effekt von man.say ('text'); Wie kann ich dieses Muster mithilfe der Es6-Klassensyntax neu erstellen?

+0

Funktion Stock (Satz) ist der Mensch tatsächlich genannt !!! –

+3

Aus Gründen der Wartbarkeit tun Sie das nicht, es sei denn, Sie haben einen sehr guten Grund dafür. – Timo

+0

@GiovanniBruno Sie können Ihre Frage einfach bearbeiten, um Fehler zu beheben – Bergi

Antwort

1

Grundsätzlich man('text') erzeugt die gleiche Wirkung von man.say('text')

Beste überhaupt nicht diesem Muster verwenden.

Wie kann ich dieses Muster mit ES6-Klassensyntax neu erstellen?

Sie können es ähnlich wie extending Function tun:

export default class { 
    constructor(options) { 
     const man = sentence => this.say(sentence); 
     Object.setPrototypeOf(man, new.target.prototype); 

     man.opts = options || {}; 
     man.age = 29; 

     return man; 
    } 
    say(sentence) { 
     console.log(sentence); 
    } 
} 
+0

verstanden, tnx ! Ich werde versuchen, meinen Zweig von Express umzufunktionieren, um dieses schreckliche Muster zu entfernen, aber wenn die Dinge zu hart werden, werde ich es versuchen –