任何JavaScript对象都从Object继承其属性(除非您执行Object.create(null)
之类的操作)。那么为什么以下不可能呢?
a={x:1,y:2}
Object {x: 1, y: 2}
Object.prototype.isPrototypeOf(a)
true
a.toString()
"[object Object]"//YES, BECAUSE a INHERITS OBJECT toString() PROPERTY
a.keys()
TypeError: undefined is not a function// BUT WHY NOT keys()
Object.keys(a)
["x", "y"]// WHILE THE OBJECT HAS keys() METHOD FROM ECMA5 SPECIFICATION
根据我的理解,它没有用的唯一原因应该是因为keys()
方法是不可继承的,但我从未见过如何在JavaScript中使一些属性不可继承。
我是否遗漏了关于典型链如何运作的事情?
答案 0 :(得分:2)
a.toString
继承自Object.prototype.toString
,而不是Object.toString
。 Object.keys
上没有Object.prototype
。
您可以添加它:
Object.prototype.keys = function keys() {
return Object.keys(this);
};
(当然不要。)