вопрос про наследование
В Sanbox.module.dom есть строчка, если parent, то наследовать, когда я создаю новый объект dome, и указываю что нужно наследовать от конструктора Sandbox, то по идее у меня должна сработать функция dome.count(), но тока этого не происходит))) я немного уже запутался, мот кто подскажет в чем проблема?
Sandbox.modules = {};
Sandbox.modules.dom = function (parent) {
if (parent)
{
function F(){};
F.prototype = parent.prototype;
Sandbox.modules.dom.prototype = new F();
}
this.name = 'AppDom';
this.getElement = function()
{
console.log(this)
}
}
function Sandbox() {
var args = Array.prototype.slice.call(arguments),
callback = args.pop(),
modules = (args[0] && typeof args[0] === "string") ? args : args[0],
i
if (!(this instanceof Sandbox)) {
return new Sandbox(modules, callback);
}
if (!modules || modules === '*') {
modules = [];
for (i in Sandbox.modules) {
if (Sandbox.modules.hasOwnProperty(i)) {
modules.push(i);
}
}
}
callback(this);
}
Sandbox.prototype.count = function(){alert('count')};
new Sandbox(['dom'], function(Modul)
{
var dome = new Sandbox.modules.dom(Sandbox);
dome.count();
});
|
noname1990, что-то ты все делаешь да не то )
1. где недостающие точки с запятой? 2. var dome = new Sandbox.modules.dom(Sandbox); конструкторы пишутся с заглавной буквы 3. count - метод прототипа функции Sandbox, откуда ему взяться у Sandbox.modules.dom?
Sandbox.modules = {};
Sandbox.modules.dom = function (parent) {
// этот участок напоминает какую-то ерунду
if (parent)
{
function F(){};
F.prototype = parent.prototype;
Sandbox.modules.dom.prototype = new F();
}
this.name = 'AppDom';
this.getElement = function()
{
console.log(this)
}
};
function Sandbox() {
var args = Array.prototype.slice.call(arguments),
callback = args.pop(),
modules = (args[0] && typeof args[0] === "string") ? args : args[0],
i;
if (!(this instanceof Sandbox)) {
return new Sandbox(modules, callback);
}
if (!modules || modules === '*') {
modules = [];
for (i in Sandbox.modules) {
if (Sandbox.modules.hasOwnProperty(i)) {
modules.push(i);
}
}
}
callback(this);
}
Sandbox.prototype.count = function(){alert('count')};
var x = new Sandbox(['dom'], function(Modul)
{
var dome = new Sandbox.modules.dom(Sandbox);
//dome.count();
});
x.count();
|
ну а в том участке, который напоминает тебе ерунду)) разве не должен протопит doma наследовать от Sandbox?
|
Дело в том, что когда создаётся новый объект оператором new, то ему присуждается прототип, равен значению свойства prototype конструктора перед выполнением конструктора. Последующее изменение свойства prototype конструктора не влияет на прототип новосозданного объекта.
В данному случае при выполении 48-ой строчки перед началом выполения конструктора, то есть функции Sandbox.modules.dom Sandbox.modules.dom.prototype был равен своему начальному значению, а изменился он лишь в 9-ой строчке. |
Привелико благодарю, буду знать на будущее!
|
| Часовой пояс GMT +3, время: 01:39. |