javascriptでのクラスの継承について
javascript初心者です
javascriptのArrayクラスを継承して新たに自作クラスを作成したいと思いました。以前にJavaでArrayListを継承し作ってあったのでjsweetでの自動変換を参考に以下のようなコードを書きました。リスト内にネストがあったらそのネストをなくすようなメソッドunnestを作成しました。
var SuperArray=(function(){
function SuperArray(c) {
if (((c != null && (c instanceof Array)) || c === null)) {
var __args = Array.prototype.slice.call(arguments);
}
else if (c === undefined) {
var __args = Array.prototype.slice.call(arguments);
}
else
throw new Error('invalid overload');
}
SuperArray.prototype = Object.create(SuperArray.prototype, {value: {constructor: SuperArray}});
SuperArray.prototype.unnest = function () {
var list = ((function () { var __o = new SuperArray(); __o.__delegate = []; return __o; })());
for (var i = 0; i < this.__delegate.length; i++) {
var o = this.__delegate[i];
if (o != null && o instanceof SuperArray) {
/* addAll */ (function (l1, l2) { return l1.push.apply(l1, l2); })(list.__delegate, o.unnest());
}
else {
/* add */ (list.__delegate.push(o) > 0);
}
}
;
return list;
};
return SuperArray;
}());
SuperArrayクラスのオブジェクトを作成し.unnestとするとUncaught TypeError: Cannot read property 'length' of undefinedというエラーをChromeが吐きました。SuperArrayはArrayを継承しているのだからlengthパラメータも使えるのではないかと思ったのですが…
ちなみにSuperArrayオブジェクトlistにlist.lengthしても大丈夫ですが、list.unnest().lengthしたら上記のエラーを吐きます。
一応継承とかprototypeとか勉強したのですがよくわかってない部分が多いです。いろいろと自分が勘違いしている点が多そうですが教えていただけると非常に助かります。宜しくお願いします。
以下追記
8/14 15:50
_delegateやコンストラクタはjsweetそのままの表記です。別に丸投げしたいわけではないのですが、調べてもわからないことだらけなので参考になるサイトなどを教えていただけるだけでも助かります。