关键字: call, Function.prototype.call
自己来实现一个call方法。
语法:fn.call([context],[arg1]....);
call干了些啥?
(function(){
function call(context){
// this => fn当前要操作的函数
// 列如fn.call()
context.$fn = this;
let resutl,args = [];
//处理余下参数
for (let i = 1; i < arguments.length; ++i) {
args.push(arguments[i]);
}
result = context.$fn(...args);
// 用完后就删除
delete context.$fn;
return result;
}
// 扩展到Function原型上去
Function.prototype.mycall = call;
})();
// 00-------------------------测试代码--------------------
let obj = {
name:‘OBJ‘
}
window.name = "WINDOW"
function fn(){
console.log(this.name);
}
fn(); // => this:window
// 使用自己实现的call=>mycall
fn.mycall(obj) // => this:obj
/**
WINDOW
OBJ
*/
以上实现的缺点:
不能接受基本类型的值
没有处理不传入第一个参数,或者传入第一个参数为null或者undefined
原文:https://www.cnblogs.com/rookie123/p/14364307.html