Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Disclaimer: Javascript non e' un linguaggio ad oggetti.
Il modo corretto e' il primo che hai riportato.
Se usi il secondo:
Codice sorgente - presumibilmente Delphi
var A ={
test: function(){ console.log("test"); }
};
var istanza =new A();// errore: Uncaught TypeError: A is not a constructor
Non hai creato una classe, hai semplicemente definito un oggetto con una funzione.
Se vuoi usare Javascript in stile OOP, e' consigliabile usare una libreria come prototype: http://prototypejs.org/ e tenere sempre in mente che non riuscirai mai ad avere a pieno tutte le caratteristiche dell'OOP. Javascript e' un linguaggio funzionale, non OOP.
Ultima modifica effettuata da pierotofy il 03/09/2017 alle 15:15
Disclaimer: Javascript non e' un linguaggio ad oggetti.
[...]
Non hai creato una classe, hai semplicemente definito un oggetto con una funzione.
Se vuoi usare Javascript in stile OOP, e' consigliabile usare una libreria come prototype: http://prototypejs.org/ e tenere sempre in mente che non riuscirai mai ad avere a pieno tutte le caratteristiche dell'OOP. Javascript e' un linguaggio funzionale, non OOP.
Ma JavaScript dallo standard ES6 non si può considerare OOP?
Ecco un valido codice ES6:
Codice sorgente - presumibilmente C++
class AClass {
constructor(id){
this.id= id;
}
esegui(){
console.log(`Esegui (id: ${this.id})`);
}
}
const a1 =new AClass(1);
const a2 =new AClass(20);
a1.esegui();
a2.esegui();
Ed ecco l'output dalla console
Codice sorgente - presumibilmente Plain Text
$ node index.js
Esegui (id: 1)
Esegui (id: 20)
Le classi in ES6 non presentano tutte le features "standard" dei linguaggi OOP, ma includono l'ereditarietà che è uno degli elementi chiave del paradigma. L'incapsulazione normale viene a mancare, ma ci sono dei workaround con le closure:
Codice sorgente - presumibilmente VB.NET
class SimpleDate {
constructor(year, month, day){
// Check that (year, month, day)is a valid date
// ...
//If it is, use it toinitialize"this"date's ordinary variables
let _year =year;
let _month =month;
let _day =day;
// Methods defined in the constructor capture variables in a closure
Effettivamente allo stato attuale sembrerebbe possibile abbandonare quegli abominevoli costrutti che cercavano di simulare le classi, e poter finalmente usufruire delle features di ECMA 6.
https://kangax.github.io/compat-table/es6/
Un linguaggio OOP deve avere incapsulamento, ereditarieta' e polimorfismo. Javascript (anche il nuovo standard ES6) non fornisce l'incapsulamento (no, neanche tramite l'uso delle closures, perche' posso sempre sovvrascrivere una closure).