自己开发组件库,完善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 }
参考:
- https://github.com/apollographql/react-apollo/issues/1251