サイズの変更を通知できるように、 (主に学術的な理由で) 配列のlength
usingにアクセサーを設定できるようにしたいと考えています。Object.defineProperty()
私は ES6 オブジェクト監視と watch.js を認識していますが、V8/Chrome のみの場合でも、可能であれば追加のライブラリを使用せずに ES5 でこれを実行したいと考えています。
サンプル配列:
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
ですfalse
-したがって、失敗は理解できます。ただし、MDN によれば、可能であるはずです。
defineProperty
配列のlength
プロパティを操作するにはどうすればよいですか? これは機能するはずですか?