Должно быть что-то, что я не понимаю о объектной модели JS.
Из этих ресурсов:
Я собрал то, что я думаю, или думал, был точным ментальным представлением объектной модели. Вот он:
Все объекты имеют свойство, которое документы называются [[Prototype]]
. [[Prototype]]
можно рассматривать как ссылку на родительский объект. Точнее:
Ссылка на объект-прототип [родителя] копируется в internal
[[Prototype]]
свойство нового экземпляра. (источник 1)
Вы можете получить доступ к свойству [[Prototype]]
для ребенка с помощью Object.getPrototypeOf(child)
. Возвращаемое здесь значение будет ссылкой на родительский прототип (а не его внутреннее свойство [[Prototype]]
, а его фактический прототип)
obj.prototype
отличается от внутреннего свойства объекта [[Prototype]]
. Он действует как чертежи, используемые для создания экземпляров этого точного объекта, а его свойство [[Prototype]]
указывает на чертежи, используемые для создания экземпляров его родителя.
-
Parent.prototype === Object.getPrototypeOf(child); //true
Разработать:
-
Если вы добавите функцию в
child.prototype
, функция будет доступна дляchild
и любого из них. -
Если вы добавите функцию в
parent.prototype
, что эквивалентно добавлению функции кObject.getPrototypeOf(child)
, тогда функция будет доступна дляparent
и всех ее дочерних элементов, которая включаетchild
и все егоsiblings
.
Вы можете использовать Object.create()
для создания нового объекта с любым требуемым свойством [[Protoype]]
. Таким образом, вы можете использовать его как способ реализации наследования. См. источник 2 для примера.
Имея это в виду, я хотел получить рабочий пример моего собственного. Мой план состоял в том, чтобы создать родительский "класс", а затем создать дочерний "класс", который унаследовал от него.
Я хотел, чтобы дочерний класс реализовал метод, который перегружал метод из родителя. Предостережение заключается в том, что я хочу, чтобы дочерняя версия метода вызывала родительскую версию метода, а затем делала некоторые дополнительные материалы.
Вот что я придумал, см. ниже связанные с этим проблемы:
var Parent = function() {};
Parent.prototype.myF = function() {
console.log('derp');
};
function Child() {
Parent.call(this);
};
//make [[prototype]] of Child be a ref to Parent.prototype
Child.prototype = Object.create(Parent.prototype);
//need to explicitly set the constructor
Child.prototype.constructor = Child;
Child.prototype.myF = function() {
Object.getPrototypeOf(this).myF();
console.log("did I derp??");
};
childInstance = new Child();
childInstance.myF();