описание объекта Object.create
Когда вы делаете что-то вроде это:
var obj = Object.create(baseMethods);
obj.ownMethod = function() {
console.log('baz');
};
var baseMethods = {
method1: function() {
console.log('something');
},
method2: function() {
console.log('foobar');
}
};
Объект obj
делегатов к baseMethod
объекта всякий раз, когда двигатель JavaScript не может найти недвижимость на obj
. Например, если вы вызываете:
obj.method1(); // will log 'something'
двигатель JavaScript сначала пытается искать свойство на obj
. Так как свойство не найдено на obj
, он будет делегировать поиск его прототипа (который мы определили с помощью Object.create
). В этом случае объект-прототип - baseMethod
. Теперь, когда свойство найдено, двигатель выполнит method1
.
Объяснение constructor.prototype
В своем коде, у вас есть:
var o = new SomeConstructor();
Думают о SomeConstructor
как имеющие объект, похожий на мой baseMethods
объекта, где экземпляры SomeConstructor будет выглядеть первый в самом экземпляре, а затем делегировать этому объекту, если свойство не может быть найдено. В вашем примере просто так происходит, что объект, который делегирует SomeConstructor
, будет SomeConstructor.prototype
.
Глядя на ваш вопрос, пожалуйста, не делайте ошибку, думая, что o
наследует от SomeConstructor
- правильный способ думать о том, что это o
делегатов его объект-поиска для объекта, который просто так случается, свойство на функциональном объекте SomeConstructor
(а именно SomeConstructor.prototype
)
Вы почти никогда не находите его непосредственно у конструктора. Было бы очень необычно делать «var o = Object.create (SomeConstructor);». Скорее вы бы сделали var var = Object.create (SomeConstructor.prototype), который был бы обычно эквивалентен 'var o = new SomeConstructor();' –
У меня есть скрипт с помощью обоих методов, но один из них печатает undefined в консоль. Http: // jsfiddle.net/3hdvuebh/3/ – Carlos
Возможно, вы захотите прочитать [эту страницу документа] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain) – thefourtheye