call的用法
call 修改函数内部this指向
call 可以让函数执行,并且可以改变函数执行时内部的this指向,this指向了 call的第一个实参,call后边的所有参数,都被作为实参传给前边的函数
举例说明
function fn() {
console.log(arguments);
console.log(this);
}
var obj = {
a: 12,
b: 13,
f: fn
}
fn(1, 2, 3);
obj.f(3,4,5);
fn.call(obj,6,6,6);
执行结果:
自己实现call
//自己实现一个myCall 用法等同于call
Function.prototype.myCall = function myCall(context, ...arg) { //剩余运算符 ...
//this 就是fn
//this(...arg)//...扩展运算符
let a = Symbol(); //产生一个唯一不重复的值
context = context || window;//容错机制 如果context不传参 this默认是window
context[a] = this;//a是一个变量 所以只能用[]去取值
let res = context[a](...arg);//让fn执行
delete context[a];
return res;
}
fn.myCall(obj, 2, 3, 4, 5);
fn.myCall();