Mein ursprünglicher Schreibstil ist so:
Funktion Dog () {this.name = 'hachi';} hunde.prototype = {makenoise: function () {alert ('wangwangwang'); }};Später sah ich eine weitere kompliziertere und scheinbar unnötige Schreibmethode:
Funktion Dog () {var privateVariable = 'Secret'; var fn = function () {// ...} fn.prototype = {makenoise: function () {alert ('wangwangwang'); }} return fn;}Die Hundefunktion hier ist tatsächlich eine Funktion, die Klassen herstellt, die die echte Hundeklasse zurückgibt.
Ich bin der Meinung, dass der Vorteil davon darin besteht, die Kapselung besser umzusetzen.
Zum Beispiel ist das private Variable hier eine private Variable:
var d = neuer Hund; D. privateVariable // undefiniert
Auch wenn Sie am Ende des ersten Beispiels einen Satz hinzufügen:
Dog.Prototype = {//e...wtf ??}Hund ist auf diese Weise kein Hund
Späteres Verständnis:
Die obige Methode zum Erstellen einer neuen Klasse schreibt das Prototyp -Objekt direkt um. Auf diese Weise werden die integrierten Eigenschaften des Prototyps verschwunden (Argumente, Anruf, Bewerben usw.).
Die folgende Methode zum Erstellen einer neuen Klasse scheint besser zu sein:
var hunde = function (name) {this.name = name; var privateVariable = 'Sie können mich nicht sehen.'; this.getPrivate = function () {return privateVariable;};}