2021-09-16
1、重写 fn.toString
function bar(){
return 2;
}
bar.toString = function(){ return 1 }
alert(bar) // 1
bar + 1 // 2
bar()
重写了一个方法的 toString
方法,然后如果这个方法当字符串用,那么就会执用方法上的 toString
方法,并返回结果,然后再作处理...
当然,如果执行这个函数,还是能执行的,这时与 toString
就没啥关系了。
2、相关面试题:
请编写一个函数使得其被以下任一方式调用都可得到预期结果。
console.log(sum(2,3)); // Outputs 5
console.log(sum(2)(3)); // Outputs 5
console.log(sum(2,3,4); // Outputs 9
console.log(sum(2)(3)(4); // Outputs 9
解题:
function add() {
let args = [...arguments]; // 类数组切换为数组
let inner = function() {
args.push(...arguments); // 存储数组
return inner; // 利用闭包
}
// 关键:巧用 toString 隐式转换,在 add 执行后,依旧能返回重写 to String 的返回结果
inner.toString = function() {
return args.reduce((a, b) => a + b);
}
return inner;
}
网友评论