Разница между Object.create и новым ключевым словом в javaScript - PullRequest
0 голосов
/ 30 января 2019

почему выход поступает в одном случае, а не в другом?у них обоих есть переменная внутри их proto , но в одном случае я получаю неопределенное значение.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Это очень просто.

new a is Object.create (a.prototype)

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

См. следующий пример:

function a(){
    this.b = 'xyz';
};

a.prototype.c = 'test';
var x = new a();
var y = Object.create(a);

//Using New Keyword
console.log(x); //Output is object
console.log(x.b); //Output is xyz.
console.log(x.c); //Output is test.

//Using Object.create()
console.log(y); //Output is function
console.log(y.b); //Output is undefined
console.log(y.c); //Output is undefined
0 голосов
/ 30 января 2019

Когда вы набираете p.constructor.prototype.a, JavaScript проверяет свойство constructor в самом объекте, но у него его нет.Когда это происходит, он проходит через цепочку прототипов через __proto__.Проблема в том, что объект p и его прототип (ы) не имеют свойства constructor.Это вызвано использованием Object.create().Разница между ним и new уже описана в Понимание разницы между Object.create () и новым SomeFunction () , как @adiga прокомментировал под вашим постом:)

...