我希望(主要是出于学术原因)能够在数组的length
using上设置访问器Object.defineProperty()
,这样我就可以通知大小更改。
我知道 ES6 对象观察和 watch.js,但如果可能的话,我想尝试在 ES5 中执行此操作而无需额外的库,即使这仅适用于 V8/Chrome。
一个示例数组:
var demoArray = ['one', 'two']
唉 Chrome,开箱即用,使长度不可配置:
Object.getOwnPropertyDescriptor(demoArray, 'length')
Object {value: 2, writable: true, enumerable: false, configurable: false}
它不起作用:
Object.defineProperty(demoArray, 'length', { set: function(){ console.log('length changed!')} })
失败'TypeError: Cannot redefine property: length'
如您所见,configurable
is false
- 所以失败是可以理解的。但是根据 MDN 应该是可能的。
如何defineProperty
处理数组的length
属性?这应该工作吗?