为什么console.log()不显示Object.create的继承属性?

dwe*_*ner 6 javascript inheritance node.js

我在尝试利用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);
Run Code Online (Sandbox Code Playgroud)

其中输出如下:

{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }
Run Code Online (Sandbox Code Playgroud)

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

我看着覆盖toString()我的对象的方法,但似乎console.log()不会调用它.

  1. 如何记录所有属性而不必枚举它们?
  2. 这是实现继承的有效方法吗?

编辑:

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

mpm*_*mpm 5

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

console.dir(derived) 
Run Code Online (Sandbox Code Playgroud)

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

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


Šim*_*das 1

Firebug确实记录继承的属性:

在此输入图像描述

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

在此输入图像描述