Добрый вечер,
Прошу мнения знающих людей.
Возникла необходимость написания библиотеки "классов", при этом встал вопрос чрезмерного захламления прототипа, вот и подумал часть функционала перенести в "статическую" область, изменяя прототип конструктора на родительский конструктор.
Вообще-то всё вроде получается, но я такого ещё не встречал.
Вообще, можно так писать? Если нет, то в чем проблема?
Проверил в IE, FF, Opera...
if( true ){
function f1(){}
f1.say = function(){
var n = [], f = this;
while( f && f.sname ){
n.push( f.sname );
f = Object.getPrototypeOf( f );
}
alert( 'f1.say ' + n.join(', ') );
}
f1.sname = 'f1';
f1.prototype = {
constructor : f1,
say : function(){
var n = [], proto = this.constructor.prototype;
while( proto && proto.constructor && proto.constructor.sname ){
n.push( proto.constructor.sname );
proto = Object.getPrototypeOf( proto );
}
alert( 'f1.prototype.say ' + n.join(', ') );
}
}
function f2(){}
f2.sname = 'f2';
Object.setPrototypeOf( f2, f1 );
f2.prototype = Object.create( f1.prototype, {
constructor : { value : f2 }
});
function f3(){}
f3.sname = 'f3';
Object.setPrototypeOf( f3, f2 );
f3.prototype = Object.create( f2.prototype, {
constructor : { value : f3 }
});
var f = new f3();
f.say();
f3.say();
}