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