【发布时间】:2011-12-17 06:25:19
【问题描述】:
这是一个纯粹的学术价值微不足道的问题:
如果我创建一个新对象,可以这样做:
var o = { x:5, y:6 };
或
var o = Object.create({ x:5, y:6 });
当我查询o.prototype 属性时,我得到undefined。我认为任何新创建的对象都会自动继承Object.prototype 原型。
此外,在该对象上调用toString(),(Object.prototype 的方法)工作得很好,这意味着o 确实继承自Object.prototype。那我为什么会得到undefined?
【问题讨论】:
-
对象“o”的“原型”属性不是运行时系统找到其原型对象的方式。有内部属性可以跟踪它;这一切都非常令人困惑。这个问题被问了很多,如果我能找到一篇关于这个主题的好博客文章,我会链接它。
-
您的对象是一个实例,而函数是具有可用
prototype属性的构造函数。如果要获取实例的原型,请使用Object.getPrototypeOf(o)。 -
@Alex Nabokov:使用`,例如`test` 将产生
test。 (从字面上理解,就是逃避它们。) -
@pimvdb 所以我继续使用
Object.getPrototypeOf(o)方法:x = Object.getPrototypeOf(o); for (prop in x) { console.log(x); },我得到了一些非常奇怪的行为,我为每个属性返回object Object,而不是x 和y。奇怪的是做同样的事情,但做console.log(x[prop])返回 5 和 6。
标签: javascript prototype-programming