业力:试图分配给只读 属性

Karma: Attempted to assign to readonly property

我扩展全局对象:

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 应该 allow/deny 更改此值,我错了吗?

Object.defineProperty() 文档中所述 writable 定义定义的 属性 是否可以使用赋值运算符进行修改。

When the writable property attribute is set to false, the property is said to be “non-writable”. It cannot be reassigned.

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