вопрос про наследование
В 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, время: 23:10. |