Sì, perché, non è possibile utilizzare questo tipo di concatenamento in una dichiarazione oggetto
obj.prototype o obj.something qui, perché il linguaggio vede obj come un valore non-oggetto. È possibile falso ad un effetto come questo
Namespace = {};
Namespace.obj =function() {
this.foo="bar";
};
Namespace.obj.prototype.start = function(tabinst) {
this.foo="fubar";
};
console.log(Namespace.obj.prototype);
(si veda questo violino http://jsfiddle.net/WewnF/)
EDIT: Wow, ho appena notato che quello che ho detto era già all'interno della domanda. Mi dispiace tanto non averlo notato prima ... Beh, il modo in cui ti descrivi è il metodo corretto per raggiungere questo obiettivo.
Altrimenti puoi riscrivere il tuo codice in questo modo - ma non è esattamente quello che stai cercando e non funzionerà allo stesso modo (dato che obj non sarà una funzione in sé e dovrai chiamare la sua funzione principale come questo obj.main();)
Namespace = {
obj: {
main : function() {
this.foo="bar";
},
prototype : {
start: function(tabinst) {
this.foo="fubar";
}
}
}
}
EDIT 2: Vedere questo violino http://jsfiddle.net/NmA3v/1/
Namespace = {
obj: function() {
this.foo="bar";
},
prototype: {
obj : {
start : function(hi) {
alert(hi);
}
}
},
initProto : function(){
for(var key in Namespace)
{
if(key !== "prototype")
{
for(var jey in Namespace.prototype[ key ])
Namespace[ key ].prototype[ jey ] = Namespace.prototype[ key ][ jey ];
}
}
}
}
Namespace.initProto();
console.log(Namespace.obj);
var test = new Namespace.obj();
test.start("Hello World");
questo avrà lo stesso effetto esattamente. Spiegazione: stiamo dichiarando i nostri oggetti come normali proprietà-funzioni, e quindi usiamo un oggetto prototipo master che contiene oggetti con gli stessi nomi precedenti, ad esempio per ogni Namespace.obj, c'è anche un Namespace.prototype.obj che contiene le funzioni che vogliamo aggiungere nella catena del prototipo.
quindi con namespace.protoInit(), iteriamo attraverso tutte le proprietà - ed estraiamo le funzioni dalla Namespace.prototype [chiave] e le aggiungiamo a Namespace [chiave] .prototype - estendendo con successo l'oggetto prototipo! Un po 'non ortodosso, ma funziona!
Approccio gradevole, +1. – Jiri
Than Amjad, è grandioso. Ma ora sto inciampando di nuovo. Lo vedo bene: con questo approccio non è possibile creare una funzione Namespace.blah() che è staccata forma obj? –
@Johnny Se ho capito bene la tua domanda, aggiungi una funzione 'blah' all'oggetto restituito: '. . ritorno { obj: obj, obj2: obj2, bla: function() {/ * qualcosa da eseguire * /}} ; ' –