【09类和模块】——4:类的扩充

本文介绍如何在JavaScript中给已有类添加新方法,包括计算复数的共轭复数,以及为函数、数字、字符串等内置类型扩展功能。

我们在这里应该明白一点——javascript中基于原型的继承机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生了变化,也会影响到继承这个原型的所有实例对象。这就意味着我们可以通过给原型对象添加新方法来扩充javascript类。

既然这样,我们就可以给博文【09类和模块】——3:javascript中java式的类继承 中的Complex类添加新的方法
这里我们给Complex类添加一个计算复数共轭复数(两个实部相等,虚部互为相反数的两个复数互为共轭复数)的方法

//返回当前复数的共轭复数
Complex.prototype.conj = function(){
    return new Complex(this.r,-this.i)
}

javascript内置类的原型对象也是一样如此“开放”,也就是说可以给数字、字符串、数组、函数等数据类型添加方法;
例如:假设函数类上面没有bind()方法,我们通过类的扩展的方式给函数类添加一个bind()方法

if(!Function.prototype.bind){
    Function.prototype.bind=function(o/*,agrs*/){
        //bind()方法的代码....
    }
}

这里还有一些其他的例子

//多次调用一个函数f,传入一个迭代数
//比如,要输出“hello”三次
Number.prototype.times=function(f,context){
    var n=Number(this);
    for(var i=0;i<n;i++){
        f.call(context,i)
    }
}
调用函数
var n=3;
n.times(function(n){console.log(n+'hellow')});

假设String中不存在trim()方法,我们在这里通过类的扩展的方式来定义trim()方法

String.prototype.trim=String.prototype.trim||function(){
    if(!this) return this   //空字符串不做处理
    return this.replace(/^\s+|\s+$/g,"")//使用正则替换空格
}

当然也可以给Object.prototype添加方法,从而使所有的对象都可以调用这些方法,但是这样的做法是不被推荐的因为在ECMAScript5之前,是无法将这些新增的方法设置为不可枚举的(一个方法不可枚举才更像是内置的方法),如果给Object.prototype添加属性,这些属性是可以被for/in循环遍历到的。


期待阅读下一篇博文:【09类和模块】——5:构造函数名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值