/*
了解apply的用处
1.可以让函数执行
2.并且可以改变函数执行时内部的this指向
3.this指向了call的第一个实参,call后边的所有参数,都被作为了实参传给了前边的函数
4.和call不同的是:第二个参数传入的是数组或者类数组的集合,虽然以一个集合的形式传过去的,但是fn接收时还是散乱的接收的
*/
function fn(){
console.log([...arguments]);
console.log(this);//查看this指向是否改变
}
var obj = {
a:12,
b:13
}
Function.prototype.myApply = function myApply(context,arg){//接收的是一个集合
//this 就是 fn
//this(...ary)//扩展运算符
//让fn(this).fn执行并且让函数中的this指向是context
//context.qqq() qqq执行时 里边的this是context
arg = arg || [];//不传参数就是空数组
context = context || window;//不传参数就是window
let a = Symbol();//产生一个唯一不重复的值
context[a] = this;//直想改为this
let res = context[a](...arg);//让fn执行并拿到了传的参数
delete context[a];//删除增加的qqq属性
}
fn.myApply(obj,[3,4]);