2015-01-04 3 views
1

Я искал для более Object.create. Я уже нашел this вопрос, который уже задал пользователь. В принятом ответе они говорят о наследовании, какнаследовать от prototype vs inherit from constructor

Object.create строит объект, который наследуется непосредственно от переданного в качестве первого аргумента.

var o = new SomeConstructor(); 

В приведенном выше примере, о наследуется непосредственно от SomeConstructor.prototype

Теперь я просто хочу знать, что это среднее наследуется от prototype и как это сделать разницу практически из наследуют непосредственно из конструктора

+0

Вы почти никогда не находите его непосредственно у конструктора. Было бы очень необычно делать «var o = Object.create (SomeConstructor);». Скорее вы бы сделали var var = Object.create (SomeConstructor.prototype), который был бы обычно эквивалентен 'var o = new SomeConstructor();' –

+0

У меня есть скрипт с помощью обоих методов, но один из них печатает undefined в консоль. Http: // jsfiddle.net/3hdvuebh/3/ – Carlos

+1

Возможно, вы захотите прочитать [эту страницу документа] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain) – thefourtheye

ответ

1

описание объекта 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)