在用Reflect.set给对象赋值时发现没有变化,但直接用obj.key=新值却可以修改,这是怎么回事?比如:
const obj = { count: 0 };
Reflect.set(obj, 'count', 1);
console.log(obj.count); // 输出1没问题,但...
当我用Object.defineProperty把属性设为writable: false后,再用Reflect.set就完全没反应了,直接赋值会报错,但Reflect.set既不报错也没修改,这是设计的特性吗?
writable: false的属性在严格模式下是不可修改的,Reflect.set不会报错但会返回false表示设置失败。如果需要强制修改,可以重新定义属性的描述符,比如这样:别折腾太多这种奇怪的需求,代码写得太绕容易给自己挖坑。