关于shadow propertyarrow-up-right, 并不是一直存在。
let exampleObj = {name: 'xiaohesong'} let obj = Object.create(exampleObj)
按照you dont known js里说的,一句话概括,就是当前对象的原型链上存在某一个属性,比如上面的name属性,并且这个name是writable: true的, 而且这个属性(例如name)没有进行setterarrow-up-right,那么如果obj.name = 'xx',就会在obj上创建一个shadow property(name).
you dont known js
name
writable: true
obj.name = 'xx'
obj
shadow property
如果上层链的是read-only(writable: false),那么严格模式下会报错,如果不是严格模式,那就忽略 不做处理,不会触发shadow。
read-only
writable: false
shadow
如果上层链的是setter,那么每次obj.name='xx'都会调用上层链的setter,并且不会重新定义setter.
obj.name='xx'
当然了,如果你真的很想做一个shadow property, 可以不实用obj.name = 'xx'这种,使用obj.defineProperty.
obj.defineProperty
Last updated 7 years ago