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

Javascript 为什么console.log()不显示从Object.create继承的属性?,javascript,node.js,inheritance,Javascript,Node.js,Inheritance,我在尝试利用基本对象上的Object.defineProperty()时遇到了问题。我想使用object.create(),从该对象继承属性,然后在派生对象中定义更多属性(可以从那里继承)。我应该注意的是,我在node.js中将其作为目标 下面是一个例子: var Base = {}; Object.defineProperty(Base, 'prop1', { enumerable:true, get:function(){ return 'prop1 value';} })

我在尝试利用基本对象上的
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()并没有调用它

  • 如何在不必枚举的情况下记录所有属性
  • 这是实现继承的有效方法吗
  • 编辑:

  • 在node.js的库中是否还有其他函数可以执行此任务并记录继承的属性
  • Firebug会记录继承的属性:

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


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

    console.dir(derived) 
    
    它将在
    \uuuu proto\uuuu
    对象上显示对象的继承属性


    编辑:似乎没有显示在节点上,但对于懒惰者来说:
    控制台的实现是特定于浏览器的。你真的不能指望它以同样的方式运行,浏览器对浏览器,因为每个供应商都在用非标准产品做完全不同的事情。当您
    console.log(对象)时
    在Chrome开发工具中,您可以得到一个可扩展的节点树,它拥有所有的方法和属性,还有
    proto
    链,它拥有完整的继承堆栈。。。在每个浏览器中都不会出现这种情况——某些浏览器(WP7 IE9)中的程序甚至在看到
    window.console
    时都会崩溃,因为它们甚至没有实现。“我应该注意,我是在node.js中将其作为目标的。”@dwerner Chrome提供了一个树视图<代码>控制台。日志
    是特定于实现的。似乎Node.js决定只记录自己的属性。当然,这并不意味着对象不继承其他两个属性。了解console.dir()也很好,谢谢。我只是不确定我是否想依靠
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuu