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;iconsole.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))

 

你可能感兴趣的:(javascript)