Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.150.89] |
|
Сообщ.
#1
,
|
|
|
Уважаемые жабодрочеры здраствуйте!
есть к примеру обьект Person var Person = function(name, age) { this.name = name; this.age = age; } Person.prototype.toString = function(){ return this.name + ' is a ' + this.age + ' years old.'; } var gregory = new Person('Gregory', 42); console.log(gregory); хочу наследовать его, но так чтобы расширить с новыми атрибутами var JavaDrocher = function(name, age, grade) { ..... } |
Сообщ.
#2
,
|
|
|
Предлагаю зобанить аффтора, т.к. нормальный код он не приемлет
|
Сообщ.
#3
,
|
|
|
все решил
// ctor Person function Person(name, age) { this.name = name; this.age = age; } // member-function Person.toString Person.prototype.toString = function() { return this.name + ' is a ' + this.age + ' years old.'; } // ctor JavaDrocher function JavaDrocher(name, age, grade) { Person.call(this, name, age); this.grade = grade; } // member-function JavaDrocher.toString JavaDrocher.prototype.toString = function(){ return this.name + ' is a ' + this.age + ' years old. Grade ' + this.grade + '.'; } // create new object var gregory = new JavaDrocher('Gregory', 42, 10); var miller = new JavaDrocher('Miller', 30, 9); console.log(gregory); console.log(miller); Gregory is a 42 years old. Grade 10. Miller is a 30 years old. Grade 9. самое интересное тут вызов Person.call(this, name, age); что он делает спросите? а я отвечу он обращается к функции Person, которая теперь благодаря функции call вызывается в контексте нашего нового объекта JavaDrocher и создает два новых атрибута name и age. гениально не правда ли? |
Сообщ.
#4
,
|
|
|
Цитата Cfon @ гениально не правда ли? Нет, это глупо, т.к. это пережиток 2000х годов. И ты сейчас пытаешься повторить то, от чего уходили 20 лет. Добавлено Более того: var gregory = new JavaDrocher('Gregory', 42, 10); console.log(greagory instanceof Person); // false Не работает. Давай дальше |
Сообщ.
#5
,
|
|
|
|
Сообщ.
#6
,
|
|
|
исправил
// ctor Person function Person(name, age) { this.name = name; this.age = age; } // member-function Person.toString Person.prototype.toString = function() { return this.name + ' is a ' + this.age + ' years old.'; } // ctor JavaDrocher function JavaDrocher(name, age, grade) { // тут магия JavaScript Person.call(this, name, age); this.grade = grade; } // наследуем прототип Person JavaDrocher.prototype = Object.create(Person.prototype); // member-function JavaDrocher.toString JavaDrocher.prototype.toString = function(){ return Person.prototype.toString.call(this) + ' Grade ' + this.grade + '.'; } // create new object var gregory = new JavaDrocher('Gregory', 42, 10); var miller = new JavaDrocher('Miller', 30, 9); console.log(gregory); console.log(miller); console.log(gregory instanceof Person); // true console.log(miller instanceof Person); // true |