js中数字调用原型上的自定义方法后被包装成对象,typeof换成instanceof解决问题

 一年多前用nuxt2.0写的给儿子认字用的项目《阿洛识字》,一直正常运行。但最近重新下载依赖后不能正常运行了。回退到前面正常的版本,重新安装依赖,仍然不行,看了看package-lock.json也和以前版本相同。
查找不能正常运行的原因,发现是我加载Number原型上的自定义方法被调用时,this变化了,以前是数字,现在变成了一个数字包装的对象。而在这里判断数字时用了typeof,经尝试,改为instanceof判断是否是目标的实例,即可解决问题。

/**
 * 随机取出一个字符或元素
 * @param n 随机取出n个元素
 * @returns {*}
 */
const rdm = function (n) {
  let temp = '';
  // 比如n为5,则temp最终是'012345'
  // if(typeof this === 'number' ){ // 这是以前的写法,若数字调用,则this变成了包装对象
  if(this instanceof Number){ // 重点:这样写没问题
    for(let i = 0; i<=this; i++){
      temp += i;
    }
  }else{
    temp = this;
  }
  if(n){
    return temp.disruptOrder().slice(0, n) // disruptOrder是个打乱顺序的方法
  }else{
    return temp[Math.random() * temp.length | 0]
  }

};

Array.prototype.rdm = rdm;
String.prototype.rdm = rdm;
Number.prototype.rdm = rdm;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值