我尝试使用一些用户友好的方法(例如 Array.Add() 而不是 Array.push() 等)在 javascript 中扩展 Array 对象...
我实现了 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
在第三种方式中,我想在 Array3 类内部扩展 Array 对象。如何做到这一点才不会得到“推送不是函数”和“未定义”?
在这里,我添加了第 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。我想有一个紧凑的定义类,所有部分都在一个地方。但我认为我不能这样做。