JavaScript高级应用之创建自定义类继承Array类

之前公司有个考试题目,如下:

请使用JavaScript编写一个Iterator类,该类创建对象时,以一个ArrayExt对象为参数,并实现对ArrayExt对象中的元素的迭代,方法列表如下:

方法名

参数

功能描述

hasNext()

查询是否存在下一个元素

next()

返回下一个元素

 

请对JavaScript中的Array对象进行封装,编写一个ArrayExt类,要求该类在Array原有方法的基础上,再提供以下方法:

方法名

参数

功能描述

clear()

清空数组对象中的所有元素

compact()

返回一个不包括源ArrayExt中null或是undefined元素的ArrayExt对象, 此方法不改变源ArrayExt对象。

indexOf(value)

value

返回参数元素所在的位置,如果该元素不在数组中,则返回-1

Shift()

返回Array的第一个元素,并将其从Array中移除它,Array的长度减1

getArray()

返回JavaScript的Array对象

 

以上两个类的命名空间为:com.thunisoft

下面是我自己写的关于上面题目的答案,经过测试没问题,欢迎指正:

/**
* 数组扩展类
*/
var com = {};
com.thunisoft = {};
com.thunisoft.ArrayExt = function(){
var x=Array.apply(this,arguments);
for(var p in x)this[p]=x[p];
this.length=x.length;
};
com.thunisoft.ArrayExt.prototype=Array.prototype;

//clear函数
com.thunisoft.ArrayExt.prototype.clear = function(){
this.length=0;
}
//compact函数
com.thunisoft.ArrayExt.prototype.compact = function(){
var compactArr = new com.thunisoft.ArrayExt();
for(var i = 0; i < this.length; i ++){
if(!(this[i] == null || typeof this[i] == "undefined")){
compactArr.push(this[i]);
}
}
return compactArr;
}
//indexOf函数
com.thunisoft.ArrayExt.prototype.indexOf = function(obj) {
var len = this.length;
from = 0;
for (; from < len; ++from){
if(this[from] === obj){
return from;
}
}
return -1;
}

//Shift函数
com.thunisoft.ArrayExt.prototype.Shift = function(){
this.shift();
}
//getArray 函数
com.thunisoft.ArrayExt.prototype.getArray = function(){
return this.__proto__.constructor;
}
/**
* Iterator类,该类创建对象时,以一个ArrayExt对象为参数,并实现对ArrayExt对象中的元素的迭代
* @param {} ArrayExt
*/
com.thunisoft.Iterator = function(ArrayExt){
this.ArrayExt = ArrayExt;
this.length=this.ArrayExt.length;
this.index=0; //从前往后
}
com.thunisoft.Iterator.prototype.hasNext = function(){
this.index=this.index+1;
if(this.index>this.length || null==this.ArrayExt[this.index-1])
return false;
return true;
}
com.thunisoft.Iterator.prototype.next = function(){
return this.ArrayExt[this.index-1];
}

JavaScript高级应用之创建自定义类继承Array类,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。