# call bind apply 的实现
# call
Function.prototype._call = function (ctx, param){
var obj = Object.assign({},ctx);
var id = +new Date();//利用时间戳生成唯一标识
obj[id] = this;
var ret = obj[id](param)
delete obj[id];
return ret;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# bind
Function.prototype._bind = function(ctx){
var obj = Object.assign({},ctx);
var args = Array.prototype.slice.call(arguments,0);
var id = +new Date();//利用时间戳生成唯一标识
obj[id] = this;
return function(){
var args2 = Array.prototype.slice.call(arguments,0);
var args3 = args.concat(args2)
var ret = obj[id](...args,...args2);
delete obj[id];
return ret
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# apply
Function.prototype._apply = function(ctx, params){
var obj = Object.assign({},ctx);
var id = +new Date();//利用时间戳生成唯一标识
obj[id] = this;
var ret = obj[id](...params);
delete obj[id];
return ret;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8