使用Object Literal / Object.Create创建Object时,对象的Prototype是什么

时间:2014-11-11 07:53:29

标签: javascript

当使用Object Literal Notation / Object.create创建该对象时,有人能告诉我一个简单对象的原型是什么吗?当我浏览了关于Object.create的MDN Notes时,它的内容如下所示

var a = {a: 1}; 
// a ---> Object.prototype ---> null

var b = Object.create(a);
// b ---> a ---> Object.prototype ---> null
console.log(b.a); // 1 (inherited)

var c = Object.create(b);
// c ---> b ---> a ---> Object.prototype ---> null

var d = Object.create(null);
// d ---> null
console.log(d.hasOwnProperty); // undefined, because d doesn't inherit from Object.prototype

但每当我尝试使用console.log(b.prototype)时,它都给了我undefined,与#34; c"和" d"宾语。我很困惑,如果b' s原型是" a"根据MDN,那么为什么它给出了undefined。

还有一个问题,如果b.prototype未定义,那么console.log(b.a)怎么样;结果1.在这种情况下如何继承?

2 个答案:

答案 0 :(得分:0)

要获取对象的原型,请使用x.__proto__Object.getPrototypeOf(x)而不是x.prototype。请注意,__proto__现在实际上已弃用,而不是Object.getPrototypeOf()

您正在使用的属性x.prototype是仅在函数中找到的属性。当使用__proto__将函数作为构造函数调用时,它用于构建new

答案 1 :(得分:0)

Prototype不是实例的成员函数实例具有原型。或者您可以添加prototype成员,但它不会为原型链做任何事情。

所有对象都有一个名为proto(一个名为__proto__的非标准属性)的东西,用于查找未在实例上指定的成员。

可在此处找到更多信息:https://stackoverflow.com/a/16063711/1641941