JS给数字添加扩展方法

扩展方法就是给原生类型添加方法,让对象用起来更加方便,JS作为一个动态语言,只要在原型链上稍作修改就可以给现有类添加方法(在js里提类可能不太恰当,但是我想不出别的说法了)

先回忆一下如何给Array添加一个拓展方法

   Array.prototype.get=function (index) {
        return this[index]
    }

这样就给array添加了一个get方法,这个方法没有太多意义,只是用作示范

然后我们就可以对js里的array调用get了

 console.log([1,2,3].get(1))//输出2

 

以上这些相信很多人都已经知道了,但是我以前一直没有找到给纯数字添加拓展方法的办法,例如一些现代语言里就有这种 10.times(lambda)就可以快速调用十次某方法。

js里确实也可以找到数字类型的原型,那就是它对应的包装对象Number,但是加了方法之后直接调用会有问题,因为实际上js里基本类型没有方法,调用时全部是委托给包装类型的,这也可以看出js和其他一些动态语言的区别,例如ruby里就没有基本类型,所有的东西都是对象

    //给数字类型添加扩展方法
    Number.prototype.times=function (fun) {

        for(var i=0;i<this;i++)
        {
            fun(i)
        }
    }
       //解析失败,不能这么写
    10.times(i=>console.log(i))

    //显式创建包装对象就可以了
     var a=new Number(10)
      //控制台输出0-9
     a.times(i=>console.log(i))

和数字不一样,string也是基本类型却不会有这个问题,添加扩展方法后,直接"xxx".doSth()就可以

 

直到今天,在复习js一些问题的时候又回想起这个东西,突然觉得可能仅仅只是js虚拟机内部的逻辑问题,然后试着加了个(),想想是不是这样就可以将基本类型的数字转化成包装类型,然后居然就成了,特此记录一下

//这个可以运行 在控制台输出0-9
(10).times(i=>console.log(i))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值