今天在玩一些宠物项目时,我遇到了一些我无法解释的特殊性。这是来自节点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
,但这似乎不会发生。在创建toString
时将writable: true
属性设置为foo
会使其按预期工作。
可以对不可写的原型属性进行阴影处理吗?
答案 0 :(得分:0)
是的,您可以使用Object.defineProperty
:
Object.defineProperty(bar, 'toString', {
configurable: true, // optional
writable: true, // optional
value: function() { return 'nope'; }
});