//在Function的原型上添加一个自己创建的函数
Function.prototype.mycall = function() {
var target = arguments[0] || window; //获取传入的第一个值 也就是指向的对象
var arg = Array.from(arguments).slice(1); //将后面传的参数全部截取出来变成数组
target.fn = this; //给指向的对象添加方法 也就是调用mycall的函数
target.fn(...arg); //给函数传参
}
Function.prototype.myApply = function() {
// 找出第一个参数 判断第一个参数是否为空 如果为空this还是指向window
var target = arguments[0] || window;
var _arg = arguments[1];
target.fn = this; //this -> 调用myApply的函数
target.fn(..._arg); //给调用myApply的函数穿参数
}
Function.prototype.mybind = function() {
// 1. 存储改变this指向的对象
var target = arguments[0] || window;
var _arg = Array.from(arguments).slice(1);
// 2. 找出最终要指向的函数
var that = this;
return function() {
// 3.执行函数 并且将函数的this指向 改为 target
var arg = Array.from(arguments);
target.fn = that;
target.fn(...(_arg.concat(arg)));
}
}