当使用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.在这种情况下如何继承?
答案 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