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