Attualmente sto lavorando a un progetto in cui stiamo scrivendo JavaScript orientato agli oggetti. In questo progetto ho visto due modi diversi di definizione di una classe:Utilizzo del prototipo JavaScript - best practice
1: Dichiarare le funzioni in una sola volta sul prototipo
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},
myFunction2: function(param1) {
this.member3 = paraml;
}
};
2: preparare ogni singola funzione sul prototipo
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype.myFunction1 = function() {
return this.member1 + " " + this.member2;
};
My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
this.member3 = paraml;
};
C'è qualche differenza nel modo in cui si comporta JavaScript in base ai due esempi forniti o è solo una differenza di stile?
Personalmente non ho notato alcuna differenza di comportamento, ma ho la sensazione che debba esserci una sottile differenza che attualmente mi manca.
Oltre a questo. Vorrei sapere se questa è una pratica comune o ci sono modi migliori per definire le classi.
Può spiegare più in dettaglio cosa si intende con _In il primo metodo, quando sovrascrivi il prototipo, c'era una proprietà là che ora è persa_. Vuoi dire che c'è una differenza nel 'My.Namespace.ClassName.constructor' prima e dopo aver chiamato' var obj = new My.Namespace.ClassName ("value1", "value2") '? – hwcverwe
No - 'My.Namespace.ClassName.prototype' viene fornito con una proprietà' constructor'. Quando si sovrascrive il prototipo, il costruttore viene perso. – Scimonster
Accettato ma una domanda però: Posso combinare entrambi gli stili o causerà qualche problema? – hwcverwe