摘要:今天看你不知道的第五章原型的时候,注意到一个关于属性设置的有意思的地方。但没想到,还有其他不能添加新属性的情况。原型链上有同名的存取器属性,且至少设置了。规则这里以设置为例。那么当我们遇到关于这些知识的的时候,就会很快将问题解决了。
今天看《你不知道的JavaScript》第五章——原型的时候,注意到一个关于JavaScript属性设置的有意思的地方。(P145)
之前,我以为除了对象被设置为不可扩展的情况,其他情况下给对象添加新属性都会成功。但没想到,还有其他不能添加新属性的情况。我所说的这种情况,就是原型链上有与你将要添加的属性同名的属性的时候。
分类原型链上有与你将要添加的属性同名的属性的情况,还要分成三种情况:
原型链上有同名的数据属性并且没有被标记为只读,即writable: true。
原型链上有同名的数据属性,但它被标记为只读,即writable: false。
原型链上有同名的存取器属性,且至少设置了setter。
规则这里以设置myObject.foo = "my"为例。
同名数据属性、可读