Array.push()などの代わりにArray.Add()のようないくつかのユーザーフレンドリーなメソッドを使用して、JavaScriptでArrayオブジェクトを拡張しようとしています...
私はこれを行うために3つの方法を実装します。残念ながら、3番目の方法が機能していないので、理由を尋ねたいのですが。そしてそれをどのように機能させるか。
//------------- 1st way
Array.prototype.Add=function(element){
this.push(element);
};
var list1 = new Array();
list1.Add("Hello world");
alert(list1[0]);
//------------- 2nd way
function Array2 () {
//some other properties and methods
};
Array2.prototype = new Array;
Array2.prototype.Add = function(element){
this.push(element);
};
var list2 = new Array2;
list2.Add(123);
alert(list2[0]);
//------------- 3rd way
function Array3 () {
this.prototype = new Array;
this.Add = function(element){
this.push(element);
};
};
var list3 = new Array3;
list3.Add(456); //push is not a function
alert(list3[0]); // undefined
3番目の方法では、Arrayオブジェクトを内部的にArray3クラスに拡張したいと思います。「プッシュは関数ではありません」や「未定義」にならないようにするにはどうすればよいですか?
ここで私は4番目の方法を追加します。
//------------- 4th way
function Array4 () {
//some other properties and methods
this.Add = function(element){
this.push(element);
};
};
Array4.prototype = new Array();
var list4 = new Array4();
list4.Add(789);
alert(list4[0]);
ここでも、プロトタイプを使用する必要があります。Array4.prototypeとしてクラスコンストラクターの外で余分な行を使用しないようにしたかったのです。すべてのピースを1か所にまとめたコンパクトな定義済みクラスが必要でした。しかし、私はそれ以外の方法でそれを行うことはできないと思います。