Да, потому что вы не можете использовать этот тип цепочки в объявлении объекта
obj.prototype или obj.something здесь, потому что язык видит obj как необъектное значение. Вы можете подделать такой эффект, как этот
Namespace = {};
Namespace.obj =function() {
this.foo="bar";
};
Namespace.obj.prototype.start = function(tabinst) {
this.foo="fubar";
};
console.log( Namespace.obj.prototype );
(см. Эту скрипку http://jsfiddle.net/WewnF/)
РЕДАКТИРОВАТЬ: Wow я только что заметил, что то, что я сказал, уже было в вопросе. Мне очень жаль, что я не заметил, что раньше ... Ну, то, как вы описали себя, является правильным способом достижения этого.
В противном случае вы можете переписать свой код следующим образом - но это не совсем то, что вам нужно, и он не будет работать так же (поскольку obj не будет самой функцией, и вам придется вызывать ее основную функцию следующим образом this obj.main ();)
Namespace = {
obj: {
main : function() {
this.foo="bar";
},
prototype : {
start: function(tabinst) {
this.foo="fubar";
}
}
}
}
РЕДАКТИРОВАТЬ 2: Смотрите эту скрипку 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" );
Это будет иметь точно такой же эффект.
Объяснение: мы объявляем наши объекты как обычные свойства-функции, а затем используем главный объект-прототип, который содержит объекты с такими же именами, как указано выше, например, для каждого Namespace.obj, есть также Namespace.prototype.obj, который содержит функции, которые мы хотим добавить в цепочку прототипов.
затем с помощью namespace.protoInit () мы перебираем все свойства - и извлекаем функции из Namespace.prototype [key] и добавляем их в пространство имен [key] .prototype - успешно расширяя объект-прототип! Немного неортодоксально, но работает!