我在嘗試在基礎對象上利用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。」*** –