apply实现原理
Function.prototype.apply2 = function (context,arr) {
//目标对象
context = context || window;
//this===实例化的函数,函数本质上也是对象
//给context添加一个临时函数
context.fn = this;
if (!arr) {
context.fn()
} else {
//接收参数处理 arguments
var args = [];
for (var i = 0; i < arr.length; i++) {
// [“arguments[0]”, “arguments[1]”, “arguments[2]”]
args.push(‘arr[’+i+‘]’)
// args.push(arguments[i])
}
//传参执行context.fn()函数
eval(‘context.fn(’ + args + ‘)’)
}
//删除临时函数
delete context.fn
}
bind实现原理
var obj = {
init: 1,
add: function(a, b) {
return a + b + this.init;
}