2015-02-07 79 views
0

今天在玩弄一些寵物項目時,我遇到了一些我無法解釋的特性。下面是從一個節點REPL日誌:不可寫的原型屬性是否可以被映射?

> foo = Object.create({}, { toString: { value: function() { return 'bob' } } }) 
{} 
> bar = Object.create(foo) 
{} 
> bar.toString() 
'bob' 
> bar.hasOwnProperty('toString') 
false 
> bar.toString = function() { return 'nope' } 
[Function] 
> bar.toString() 
'bob' 

這是我的期望bar.toString將陰影foo.toString,但是這似乎並沒有發生。在創建foo時,將toString屬性設置爲writable: true使其按預期工作。

不能寫入的原型屬性是否可以被映射?

+0

清晰:需要注意的是任何屬性名稱不相同,「toString2」或「myProp」,這裏不僅僅是「的toString」 – dandavis 2015-02-08 00:56:16

+0

的主要問題是非常有用這個問題一樣:[從凍結的父對象創建新的對象](http://stackoverflow.com/questions/19698533/creating-new-objects-from-frozen-parent-objects) – 2015-02-08 02:57:32

+0

@ Qantas94Heavy是對的,這個問題應作爲副本關閉。感謝您的鏈接! – 2015-02-08 15:13:36

回答

0

是的,你可以使用Object.defineProperty

Object.defineProperty(bar, 'toString', { 
    configurable: true, // optional 
    writable: true,  // optional 
    value: function() { return 'nope'; } 
}); 
相關問題