我在尝试在基础对象上利用Object.defineProperty()
时遇到挂断。我想从该对象继承属性,使用Object.create()
,然后在派生对象中定义更多属性(可能从此继承)。我应该注意到,我正在node.js上实现这个目标。为什么console.log()不显示Object.create的继承属性?
下面是一个例子:
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的图书馆其他功能,将做的工作和日志继承属性?
对于懒:http://jsfiddle.net/ aDrjA/1/ –
对于初学者来说,'console'的实现是针对浏览器的。你真的不能依靠它来运行浏览器,因为每个供应商都在做与非标准完全不同的事情。当你在Chrome开发工具中使用console.log(object)的时候,你会得到一个可扩展的节点树,它拥有所有的方法和属性,并且还有'proto'链,它具有完整的继承栈......在每个浏览器中都会遇到这种情况 - 即使看到“window.console”,某些浏览器(WP7 IE9)中的程序也会崩溃,因为它们甚至没有实现。 – Norguard
***“我应该注意到我正在使用node.js。”*** –