在JavaScript中继承Object中的属性

时间:2014-05-19 20:02:48

标签: javascript prototype

任何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中使一些属性不可继承。

我是否遗漏了关于典型链如何运作的事情?

1 个答案:

答案 0 :(得分:2)

a.toString继承自Object.prototype.toString,而不是Object.toStringObject.keys上没有Object.prototype

您可以添加它:

Object.prototype.keys = function keys() {
    return Object.keys(this);
};

(当然不要。)