6

我在尝试利用Object.defineProperty()基础对象时遇到了挂断。我想使用 继承该对象的属性,Object.create()然后在派生对象中定义更多属性(可以从那里继承)。我应该注意,我的目标是 node.js。

这是一个例子:

var Base = {};

Object.defineProperty(Base, 'prop1', {
    enumerable:true,
    get:function(){ return 'prop1 value';}
});

Object.defineProperty(Base, 'prop2', {
    enumerable:true,
    value : 'prop 2 value'
});

Object.defineProperty(Base, 'create', {
    value:function(){
        return Object.create(Base);
    }
});

console.log(Base);

var derived = Base.create();

Object.defineProperty(derived, 'prop3', {
    enumerable:true,
    value:'prop 3 value'
});

console.log(derived);

输出以下内容:

{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }

我认为 console.log() 会枚举继承的属性,以及prop3我在派生对象上定义的属性。它似乎不会查找以这种方式定义的属性的原型层次结构。那是对的吗?

我查看了覆盖toString()对象的方法,但似乎 console.log() 没有调用它。

  1. 如何在无需枚举的情况下记录所有属性?
  2. 这是实现继承的有效方法吗?

编辑:

  1. node.js 的库中是否还有另一个函数可以完成这项工作并记录继承的属性?
4

2 回答 2

5

您可以console.dir()在可用的地方使用

console.dir(derived) 

它会在对象上显示__proto__对象的继承属性

编辑:虽然似乎没有出现在节点上

于 2012-11-09T01:39:26.263 回答
1

Firebug确实记录了继承的属性:

在此处输入图像描述

而 Chrome 为您提供了一个包含继承属性的树视图:

在此处输入图像描述

于 2012-11-09T01:38:35.837 回答