求む。インスタンスをArrayで拡張する方法
Arrayインスタンスを拡張したい。
- prototype汚染はさせない
- Array.prototypeの上書き禁止
- Arrayオブジェクトと同じ挙動
という条件。
下記、EXArray
というコンストラクタをArrayの様な扱いにしたいわけだ。
テストコードでも書いているが
- instanceof
obj instanceof Array
// true であることobj instanceof EXArray
// true であること
- 配列要素は
hasOwnProperty
で true が返ること toString
が配列っぽく返ってくること
までは実現できている。しかし、
JSON.stringify(obj)
が Arrayっぽくないobj.toSource()
がTypeError: Array.prototype.toSource called on incompatible Object
と例外が出てしまう。toSource: function(){ return Object.prototype.toSource.call(this); }
で一応は実行可能になるが、ArrayのtoSourceのようにならない。
ということで、うまくヤル方法があったら教えてください。JavaScriptハッカーさん、お願いします><