var Treasure = function(){
function locate(){
return this.x * this.y + 31337;
}
function Treasure(x, y){
this.x = x;
this.y = y;
}
Treasure.prototype.find = function find(){
return locate.call(this);
};
return Treasure;
}();
locate
è una funzione privata condivisa per i metodi costruttore e prototipo. Utilizzando call
può agire come un metodo e utilizzare this
.
Un'implementazione più completa di questo concetto è quella degli oggetti di interfaccia e degli oggetti di implementazione. Invece di avere alcune funzioni casuali come metodi (simili a locate sopra) in realtà crei un'intera classe privata. Ogni creazione esterna dell'interfaccia risulta in due oggetti raggruppati: l'interfaccia della shell pubblica e l'oggetto di implementazione privato. Ciò ti consente di esporre un'interfaccia che fornisce pubblicamente un'API diversa, forse più facile da usare. Oppure puoi permetterti di riutilizzare singoli oggetti di implementazione privati per interi gruppi di oggetti di interfaccia.
Questo è in realtà il modo in cui il DOM viene specificato per funzionare (di solito non è implementato in js). Gli oggetti di interfaccia (elemento e oggetti nodo per esempio) sono specificamente richiesti per avvolgere l'implementazione sottostante che effettivamente fa la parola. Gli oggetti esposti sono poco più di shell che inoltrano l'accesso alle proprietà e il richiamo del metodo.
Dom.js è un'implementazione DOM completa realizzata in js. Una tecnica interessante con cui mi sono familiarizzato mentre lavoravo era la generazione completamente automatizzata di interfacce pubbliche. Questo è lo scopo di IDL: l'API pubblica viene letteralmente generata automaticamente, lasciando solo l'implementazione privata effettivamente creata. Che cosa significa in realtà questo è possibile creare cose come questa senza consultare un umano: https://github.com/Benvie/svgstuff/blob/master/lib/defs.js
fonte
2012-07-04 08:10:23
+1 per il collegamento alle app della pagina singola ebook! Grazie.. – renatoargh