js 有关类的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/25 08:30:49
下面是我自定义的Array类但是在使用length属性的时候,每次都发现length的值为0,不知道是什么原因?我也调试了一下,感觉好像问题出在Array类的定义中,是不是在定义类的时候就已经把那个length属性的值给固定死了?请哪位大虾指点!谢谢!!!

function Array() {
this._data = [];
this.length = this._data.length;
}

Array.prototype.push = function(data) {
this._data[this.length] = data;
}
Array.prototype.pop = function() {
var result = this._data[this.length - 1];
this.length -= 1;
return result;
}
呵呵,我要的不是这个结果,我需要的是为什么我的源码没有实现我想要的功能!不过还是谢谢你!
谢谢大家的回答,不过我有一个疑惑,在调用push后,Array中的_data应该会增加一个数据,那么这个数组的length属性应该会自动增加1啊,为什么还要单独写程序增加1呢?谢谢!!!

Array的length属性应该是一对getter和setter
在你调用Array的一些方法时会改变length属性
建议你不要把原来Array给覆盖掉,很可能会出问题的
Array.prototype.push=function(){
for (var i=0,l=arguments.length;i<l;i++){
this[this.length++]=arguments[i];
}
return this.length;
};

Array.prototype.push = function(data) {
this._data[this.length] = data;
}

这里没有对this.length 进行加1运算

改成:

Array.prototype.push = function(data) {
this._data[this.length] = data;
this.length++;
}

如果你是想实现一个堆栈的功能,可以用我的这段代码:
Array.prototype.push = function(data) {
this[this.length] = data;
}
Array.prototype.pop = function() {
return this.splice(this.length-1,1);
}
注意:删除Array的定义部分
function Array() {
this._data = [];
this.length = this._data.length;
}
测试:
var a = new Array();
a.push(1);
a.push(2);
alert(a.pop());
a.push(3);