Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2012, 22:51
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

вопрос про наследование
В 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();
});
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2012, 00:16
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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();
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 28.06.2012, 00:40
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

ну а в том участке, который напоминает тебе ерунду)) разве не должен протопит doma наследовать от Sandbox?
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2012, 00:57
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Дело в том, что когда создаётся новый объект оператором new, то ему присуждается прототип, равен значению свойства prototype конструктора перед выполнением конструктора. Последующее изменение свойства prototype конструктора не влияет на прототип новосозданного объекта.
В данному случае при выполении 48-ой строчки перед началом выполения конструктора, то есть функции Sandbox.modules.dom Sandbox.modules.dom.prototype был равен своему начальному значению, а изменился он лишь в 9-ой строчке.

Последний раз редактировалось oneguy, 28.06.2012 в 01:02.
Ответить с цитированием
  #5 (permalink)  
Старый 28.06.2012, 01:31
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Привелико благодарю, буду знать на будущее!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про сравнения san4es Javascript под браузер 4 01.04.2012 16:56
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 14:06
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50
вопрос про <select> Krondor Общие вопросы Javascript 2 25.11.2009 17:04