javaScript中Object.create和new关键字之间的区别

时间:2019-01-30 12:57:45

标签: javascript prototypal-inheritance proto

为什么输出来自一种情况而不是另一种情况?他们两个人的 proto 内都有一个变量,但在一种情况下,我却无法定义。

2 个答案:

答案 0 :(得分:0)

当您键入p.constructor.prototype.a时,JavaScript会在对象本身中检查属性constructor,但它没有属性。发生这种情况时,它将通过__proto__遍历原型链。这里的问题是对象p及其原型没有属性constructor。这是由于使用Object.create()引起的。它与new之间的区别已经在Understanding the difference between Object.create() and new SomeFunction()中描述为@adiga在您的帖子下评论了:)

答案 1 :(得分:0)

这很简单。

新的是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