Ok I dovrebbe conoscere la risposta a questo, ma per qualche motivo non ho mai veramente capito o ho avuto la necessità di conoscere veramente JavaScript.JavaScript fondamentale OO
La mia domanda è: guardando i seguenti esempi di codice sono corretto nella mia comprensione o mi mancano alcune informazioni.
Esempio 1
Necessità di istanziare la funzione (o classe) al fine di utilizzare il metodo IsOld
, e una copia separata della funzione IsOld
verrà creata per ogni istanza.
function MyClass1() {
this.IsOld = function (age) {
if (age > 40) {
return true;
}
return false;
};
}
// sample usage
var m1 = new MyClass1();
console.log(m1.IsOld(34));
Esempio 2
bisogno di istanziare ma a differenza MyClass1
il motore di script non avrà bisogno di creare una copia del metodo IsOld
per ogni istanza di classe.
var MyClass2 = (function() {
function MyClass2() { }
MyClass2.prototype.IsOld = function (age) {
if (age > 40) {
return true;
}
return false;
};
return MyClass2;
})();
// sample usage
var m2 = new MyClass2();
console.log(m2.IsOld(34));
Esempio 3
Non c'è bisogno di istanziare la funzione/classe per accedere al metodo IsOld
. Una singola istanza del metodo IsOld
viene utilizzata in tutte le chiamate.
var MyClass3 = {
IsOld: function (age) {
if (age > 40) {
return true;
}
return false;
},
};
// sample uage
console.log(MyClass3.IsOld(34));
Nota: sto indovinando ci sono un sacco di simili interrogativi/risposte qui su SO, ma per qualche motivo non riusciva a trovare uno che in realtà aveva senso per me.
tuo la comprensione è corretta, sebbene il secondo esempio sia inutilmente complesso con l'espressione di funzione immediata IMO. –
@FelixKling: In realtà, questo è il modo in cui CoffeeScript compila le sue classi: http://coffeescript.org/#try:class%20Auto – Amberlamps