可以写入不可写的原型属性吗?

时间:2015-02-07 23:57:34

标签: javascript prototype

今天在玩一些宠物项目时,我遇到了一些我无法解释的特殊性。这是来自节点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会使其按预期工作。

可以对不可写的原型属性进行阴影处理吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以使用Object.defineProperty

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