前端学堂
学有所用

Cannot add property x, object is not extensible

自己开发组件库,完善eslint的时候,修改了一些代码,更新完测试发现报错:object is not extensible

百思不得其解。

'use strict';

var obj = {};
Object.preventExtensions(obj);

obj.x = 'foo';
// TypeError: can't define property "x": "obj" is not extensible

通常情况下,对象是可以添加属性的。但是使用preventExtensions方法之后,不能给锁定的对象添加任何属性了,会报错。

const object1 = {};

console.log(Object.isExtensible(object1));
// expected output: true

Object.preventExtensions(object1);

console.log(Object.isExtensible(object1));
// expected output: false

但是,我也每调用这个方法啊。

如果使用immutable.js 或者 React Apollo, 如果参数是一个对象,默认会将参数设置成不可变。

function test(a){
   let b=a;
   
   b.c={}   // error,object b is not extensible
}

换成下面的写法:

function test(a){
   let b={...a};
   
   b.c={}   // ok
}

参考:

  1. https://github.com/apollographql/react-apollo/issues/1251
赞(0) 打赏
未经允许不得转载:前端学堂 » Cannot add property x, object is not extensible

评论 抢沙发

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏