2015-03-03 2 views
1

У меня есть следующий родительский класс ...Javascript наследование свойств, определенных с Object.defineProperty

function Parent(id, name, parameters) { 
 
    Object.defineProperty(this, "id", { 
 
    value: id 
 
    }); 
 

 
    Object.defineProperty(this, "name", { 
 
    value: name, 
 
    writable: true 
 
    }); 
 
};

и соответствующий класс ребенок:

function Child(id, name, parameters) { 
 
    Object.defineProperty(this, "phone", { 
 
    value: parameters.phone, 
 
    writable: true 
 
    }); 
 
};

Я попытался применить наследование, добавив что-то вроде Child.prototype = Object.create (Parent.prototype); , но это явно не работает.

Как я могу наследовать от класса Parent, чтобы я мог использовать идентификаторы свойств и имя.

+1

Я предлагаю вам прочитать мой ответ здесь. Это может помочь вам понять, как наследование может быть достигнуто прототипом. http://stackoverflow.com/questions/28600238/trying-to-understand-the-difference-between-prototype-and-constructor-in-javascr/28600866#28600866 – Tschallacka

+0

Решение в этой статье мне очень помогло, я просто изменено. Child.prototype = new Parent(); к Child.prototype = Object.create (Parent.prototype); – fyaa

ответ

3

Я попытался применить наследование, добавляя что-то вроде Child.prototype = Object.create(Parent.prototype);

Да, вы должны сделать это, чтобы создать цепочку прототипов между вашими .prototype объектами. У вас есть свои методы, определенные на них, не так ли?

Как я могу наследовать от родительского класса, чтобы я мог использовать идентификаторы свойств и имя.

Вы в основном нужен «супер» вызов в Parent конструктор так, что он устанавливает свои свойства на Child случаях:

function Child(id, name, parameters) { 
    Parent.call(this, id, name, parameters); 
    Object.defineProperty(this, "phone", { 
    value: parameters.phone, 
    writable: true 
    }); 
} 
+0

Спасибо, на самом деле я уже мог прочитать его сообщение Майкла Диббе. Помимо этого Parent.call я должен был определить следующее после объявления функции: Child.prototype = Object.create (Parent.prototype); Child.prototype.constructor = Ребенок; – fyaa

Смежные вопросы