21.11.2011, 21:37
|
|
Профессор
|
|
Регистрация: 06.05.2008
Сообщений: 765
|
|
Ну тогда у автора топика все то же самое
var todayTimeTable = new timeTable();
function timeTable(){
this.showHeader = function(){
document.write("Расписание на сегодня<br />");
}
}
timeTable.prototype = new Array;
timeTable.prototype.showFirst = function(){
document.write(this[0]);
}
// var todayTimeTable = new timeTable(); - если создать объект здесь,то все методы работают
alert(todayTimeTable instanceof timeTable)
|
|
21.11.2011, 21:45
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Ну да, всё правильно. Наследование в JS определяется же не по функции которая создала объект, а по прототипу принадлежащему этой функции.
У меня алерт выдаёт - фолс, и правильно делает) ведь теперь его inctance другой.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
22.11.2011, 14:58
|
Новичок на форуме
|
|
Регистрация: 12.10.2011
Сообщений: 6
|
|
Сообщение от Nekromancer
|
По хорошему конечно, наследование нужно организовывать приблезительно так:
var create = Object.create || (Object.create = function(proto){
var constructor = function(){};
constructor.prototype = proto;
return new constructor;
}), inherit = function(childHandler, parent){
var child = function(){
parent.apply(this, arguments);
childHandler.apply(this, arguments);
};
child.prototype = create(parent.prototype);
child.prototype.__parent__ = parent;
return child;
}
var A = function(){
this.foo = 1;
},
B = inherit(function(){
this.bar = 2;
}, A),
c = new B();
alert(c instanceof B);
alert(c instanceof A);
|
В данном случае у объектов есть только свойства. А если у них будут еще и методы, как будет выглядеть наследование?
|
|
22.11.2011, 16:01
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Методы это те же свойства, всё точно так же.
Или вы хотите сделать что бы когда, вы вызываете someMethod у объекта, этот метод вызывался у всех прототипов?
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
22.11.2011, 16:25
|
Новичок на форуме
|
|
Регистрация: 12.10.2011
Сообщений: 6
|
|
Сообщение от Nekromancer
|
Методы это те же свойства, всё точно так же.
Или вы хотите сделать что бы когда, вы вызываете someMethod у объекта, этот метод вызывался у всех прототипов?
|
да. Могу я, например, сделать вот так:
B = inherit(function(){
this.bar = 2;
this.showBar = function(){
document.write(this.bar);
}
}, A)
Этот showBar будет только у B, у A его не будет? А можно чтобы он и у A был?
|
|
22.11.2011, 16:53
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Первым параметром вставляется обработчик нового класса, он будет вызываться только когда создаётся B. Что бы метод был в обоих классах, его нужно задавать у родителя.
A.prototype.showBar = function(){
// ...
}
Ну или если вы так желаете, можно в теле конструктора -
var A = function(){
this.showBar = function(){
//...
}
}
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
23.11.2011, 11:40
|
Новичок на форуме
|
|
Регистрация: 12.10.2011
Сообщений: 6
|
|
Сообщение от Nekromancer
|
Первым параметром вставляется обработчик нового класса, он будет вызываться только когда создаётся B. Что бы метод был в обоих классах, его нужно задавать у родителя.
A.prototype.showBar = function(){
// ...
}
Ну или если вы так желаете, можно в теле конструктора -
var A = function(){
this.showBar = function(){
//...
}
}
|
Следующий подход наверное неверен?
var A = function(){
this.foo = 1;
},
B = function(){
this.bar = 2;
};
var objA = new A();
B.prototype = objA;
var c = new B();
alert(c instanceof A); //true
alert(c instanceof B); //true
Из-за того что "лишний" объект создается?
|
|
23.11.2011, 12:01
|
Новичок на форуме
|
|
Регистрация: 12.10.2011
Сообщений: 6
|
|
Сообщение от trikadin
|
Из этого следует, что не нужно прототип делать массивом. Массивом объект всё равно не станет)
|
Скажите, пожалуйста, в случае с моим скриптом, могу ли я расширить Array дополнительными методами showHeader и showFirst?
Или этот подход неверен?
Вот так скрипт работает:
var todayTimeTable = new Array();
Array.prototype.showHeader = function(){
document.write("Расписание на сегодня<br />");
}
Array.prototype.showFirst = function(){
document.write(this[0]);
}
todayTimeTable.showHeader(); //Расписание на сегодня
todayTimeTable.push("Информатика");
todayTimeTable.showFirst(); // Информатика
|
|
23.11.2011, 16:17
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
mat5978,
неверно потому, что конструктор родителя вызывается когда вы создаёте новый конструктор, а это не совсем удобно/правильно.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
|
|