Объясните как работает...
Почему во втором конструкторе аргументы надо указывать отдельно(если this.base = Obj(name,age), то не работает)
function Obj(name,age){ this.name = name; this.age = age; }; function Obj2(pr,name,age){ this.base = Obj; this.base(name,age); this.property = pr; } var newOb = new Obj2('Cool','Alexej',22); newOb['name'] //выведет Alexej |
Нужно явно указать контекст при вызове Obj: Obj.call(this, name, age)
|
Цитата:
this.base = Obj; this.base(name,age); |
рони, как то так :)
function Obj(name,age){ this.name = name; this.age = age; }; function Obj2(pr,name,age){ this.base = Obj.call(this, name, age) // совет danik.js //this.base(name,age); this.property = pr; } var newOb = new Obj2('Cool','Alexej',22); alert(newOb['name']) //выведет Alexej |
Я так понял что Alexej не может разобраться, почему Obj нельзя вызвать напрямую. Но вобще что хочет автор, и что его не устраивает в текущей реализации - мне непонятно.
|
Цитата:
this.base= ундеф... |
jsgeek,
в таком случае базу больше нельзя использовать function Obj(name,age){ this.name = name; this.age = age; }; function Obj2(pr,name,age){ this.base = Obj.call(this, name, age) // совет danik.js //this.base(name,age); this.property = pr; } var newOb = new Obj2('Cool','Alexej',22); alert(newOb['name']) //выведет Alexej alert(newOb['base']) Цитата:
|
dmitriymar, рони, в самом деле...
|
После медитации пришел к такому умозаключению.
Конструктор оперирует вновь созданным объектом, который доступен по ссылке this. Выражение this.base = Obj(name,age) возвращает undefined так как без new это обычная функция. Если сделать так: this.base = new Obj(name, age); В this.baseбудет объект класса Obj А теперь самое интересное: Вызов Obj.call(this, name, age) подсовывает конструктору Obj не новый объект а тот которым оперирует Obj2. Т.е. эти два конструктора оперируют одним объектом. И наконец-то моя ошибка: this.base = Obj.call(this, name, age)this.base === undefined так как конструктор не возвращает объект а инициализирует его. |
Цитата:
контекст меняет |
Часовой пояс GMT +3, время: 04:05. |