当我使用object.create创建这样的新对象时,
o = {x:1,y:2};
p = Object.create(o);
我的印象是,o成为了p的原型,并继承了它的所有方法。
那为什么,当我尝试时
print(p.prototype);
输出未定义?o定义明确!!
谢谢
只有函数具有prototype
属性[ES5]。
p
通过内部[[Prototype]]
属性引用o
,在某些具有__proto__
[MDN]的浏览器中可以访问该属性,但现在已弃用。
您可以使用Object.getPrototypeOf
[MDN]:获得对对象原型的引用
Object.getPrototypeOf(p) === o // true
试试看,o
成为p
的原型意味着o
是p
的构造函数的原型。
console.log(p.constructor.prototype);
var o = {x:1,y:2};
var p = Object.create(o);
你可以将上面的图片如下:
var o = {x:1,y:2};
function constructor_of_p(){};
constructor_of_p.prototype = o;
var p = new constructor_of_p();