Karma:试图分配给只读属性

时间:2016-03-31 10:51:14

标签: javascript karma-jasmine

我扩展了全局对象:

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应该允许/拒绝更改此值,我错了吗?

1 个答案:

答案 0 :(得分:1)

正如Object.defineProperty() writable上的文档中所述,定义了使用赋值运算符是否可以修改已定义的属性。

  

当writable属性属性设置为false时,属性为   据说是“不可写的”。它无法重新分配。

在严格模式下,这将导致TypeError被抛出,如您所述。 我不确定错误的哪一行node_modules/karma-jasmine/lib/adapter.js被抛出,但您可能会在那里找到一个不允许的重新分配,因为getRecursive属性被标记为不可写。