In ES5 konnte ich eine Fabrik Muster wie folgt verwenden:machen Konstruktorargumente privilegiert ES6 Klassenmethoden
function factory(a) {
return {
say: function() {
return console.log(a)
}
};
}
var instance = factory('hi');
instance.say(); // => 'hi'
instance.a; // => 'undefined'
Das Argument der Fabrik übergeben wird nicht auf das Objekt festgelegt es schafft, so dass er privilegiert ist, Alle Methodendefinitionen sind dem Autor nicht bekannt.
Wenn ich diese Fabrik zu einer ES6-Klasse machen möchte, wie kann ich die Konstruktorparameter auf die gleiche Weise offenbaren?
let hack;
class Blah {
constructor(a) {
//bad!
this.a = a;
//but even worse?
hack = a;
//instance method is not a class method
this.yell =() => console.log(a);
}
say() {
console.log(hack);
}
}
let blah = new Blah('hi');
blah.a; // => 'hi'
blah.hack; // => 'undefined'
blah.say(); // => 'hi'
blah.yell(); // => 'hi'
[Dieser Artikel] (http://www.2ality.com/2016/01/private-data-classes.html) bietet einige Möglichkeiten, aber ich stimme grundsätzlich mit deceze überein: Sie machen sich zu viele Sorgen. : P Zum Beispiel hat Python überhaupt keine privaten Mitglieder; und es tuckert einfach gut, nur durch die Verwendung von Konvention. – Amadan
@Amadan Python ist genau das, was mich zu meiner unten beschriebenen Ansicht gebracht hat; die Vorstellung von * "wir alle stimmen Erwachsenen hier zu, nur nicht berühren meine Privatsphäre m'kay" * ist so eine wichtige Lektion ... – deceze