我扩展了全局对象:
Object.defineProperty(Object.prototype,'getRecursive', {writable: false, value: function(keyChain){
var keys = keyChain.split('.');
if(keys.length > 1){
var currentKey = keys[0];
keys.splice(0, 1);
return this.getRecursive.call(this[currentKey], keys.join('.'));
}
return this[keys[0]];
}});
当我运行测试时,我TypeError: Attempted to assign to readonly property.
位于node_modules/karma-jasmine/lib/adapter.js
。
当我将writable
更改为true
错误消失时,为什么?
value
上的函数是属性的默认值,而writable
应该允许/拒绝更改此值,我错了吗?
答案 0 :(得分:1)
正如Object.defineProperty() writable
上的文档中所述,定义了使用赋值运算符是否可以修改已定义的属性。
当writable属性属性设置为false时,属性为 据说是“不可写的”。它无法重新分配。
在严格模式下,这将导致TypeError
被抛出,如您所述。
我不确定错误的哪一行node_modules/karma-jasmine/lib/adapter.js
被抛出,但您可能会在那里找到一个不允许的重新分配,因为getRecursive
属性被标记为不可写。