一年多前用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;
}
// console.log(temp)
if(n){
return temp.disruptOrder().slice(0, n)
}else{
return temp[Math.random() * temp.length | 0]
}
};
Array.prototype.disruptOrder = disruptOrder;
String.prototype.disruptOrder = disruptOrder;
Number.prototype.disruptOrder = disruptOrder;
Array.prototype.rdm = rdm;
String.prototype.rdm = rdm;
Number.prototype.rdm = rdm;