javascript中扩展Array类的原型

在js中,只要是类就有原型,不管它是自定义类还是js的内置类,我们可以通过修改内置类的原型,让js基本类型的对象获得其它功能。

下面,我们来扩展一下Array类的原型. 

//扩展Array类,实现一个each函数,
//功能:循环数组中的每个元素。 
// 参数:     fun是一个回调函数,可以理解成是一个接口,调用each方法时,要提供这个接口的一个实现函数。
Array.prototype.each=function( fun ){
	//无论是在类的构造函数还是在原型中,this都指向实例化的对象,这里指的是调用each方法的数组对象. 
	for( var i=0,n=this.length;i<n;i++){
		fun( i, this[i]);	
	}
}

//Array类的克隆函数
Array.prototype.clone=function(){
		var o=[];
		this.each(  function(k,v){
			o[k]=v;	
		});
		return o;
}

//Array类的map函数
Array.prototype.map=function(   fun  ){
	var o=[];
	this.each(   function( k,v){
		o[k]=fun( k,v );	
	} );
	return o;
}
//Array类的del函数:在ie中delete是保留字,所以用del做函数名
Array.prototype.del=function(  a  ){
	var o=this.clone();
	for( var i=o.length,n=0;i>n;i--){
		if( o[i]==a ){
			o.splice(i,1 );
		}	
	}
	return o;
}
//当然,也可以重写Array类原有的toString()方法,
Array.prototype.toString=function(){
	var str="";
	this.each(   function(k, v){
		str+=k+":"+ v+",";
	}    );
	return str;
}


//测试each函数
var arr=[1,2,3,4];
var str="";
arr.each(   function(k, v){
	str+=k+":"+ v+"\n";
}    );
alert(  str );

//测试clone函数
var r=arr.clone();
alert( r );

//测试map函数
r=arr.map(   function(k,v ){
	return v*2;
} );
alert( r );

//测试del函数
r=r.del( 4 );
alert( r );

注意: 内置类的方法可以重写,但属性是不能重写的。  
特别提醒: 使用扩展内置类的原型会对内置类造成污染,因为内置类的原型是一种全局作用的。 在多人合作的大中型项目中有可能对别人的代码造成影响。 
 那么这时,可以采用自定义类,将内置类的实例作为参数传给构造函数,在自定义的类中定义扩展方法。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangyingchengqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值