手写属于自己的call方法
Function.prototype.My_call = function My_call(context, ...params) {
context = context = null ? window : context
let contextType = typeof context
if(!/^(object|function)$/i.test(contextType)){
context = Object(context)
}
let result,key = Symbol('KEY')
context['key'] = this
result = context['key'](...params)
delete context['key']
return result
}
function add (x,y){
console.log(this,x+y)
}
var obj ={
name : '帅狒狒'
}
var a =1
add.My_call(obj,1,2)
Function.prototype.My_call = function My_call(context, ...params) {
`//context -> 更改指向后,this想要指向的`
`//...params ->参数
//this -> 在没有更改指向前,指向的是要执行的函数`
context = context = null ? window : context;
let contextType = typeof context;
if(!/^(object|function)$/i.test(contextType)){
context = Object(context);
}
`//判断context是不是对象,不是的话。就改变成对象。`
let result,key = Symbol('KEY');
`//symbol是具有唯一值的`
context['key'] = this;
`//给context增加属性值,属性值是你想要指向的程序。
//利用 成员属性访问的方法来改变this的指向。`
result = context['key'](...params);
`//执行函数`
delete context['key'];
`//函数执行完之后,就删去这个属性值。`
return result;
`//call的返回值为 执行后的结果`
}