我尝试在JavaScript扩展Array对象有一些用户友好的方法,如Array.Add()代替的Array.push()等数组对象...方式来扩展在JavaScript
我实现了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
在第三种方式我想扩展Array对象内部的Array3类。 如何做到这一点,以免得到“推动不是一个功能”和“未定义”?
这里我添加了第四种方式。
//------------- 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。 我想在一个地方有一个紧凑的定义类与所有作品。 但我想我不能这样做,否则。
如果你添加一个方法到数组,你将破坏数组的foreach() – SpacedMonkey
你看过咖啡脚本吗?我将用示例更新我的答案 – SMathew
我不会像第一个示例中那样向Array.prototype添加方法。这是一个考验。我将创建一个将扩展Array对象的类。例如jsArray。 jsArray对象将是数组,但具有更多功能。 – demosthenes