求む。インスタンスを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ハッカーさん、お願いします><