Объясните как работает...
Почему во втором конструкторе аргументы надо указывать отдельно(если 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:31. |