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()并没有调用它
您可以在可用的地方使用
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
。