call函数实现
Function.prototype.ltCall = function(thisArg, ...arr) {
var result = undefined;
var fn = this;
thisArg = thisArg ? Object(thisArg) : window;
var symbol = Symbol();
thisArg[symbol] = fn;
arr = arr ? arr : [];
var symbols = Object.getOwnPropertySymbols(thisArg);
for (key of symbols) {
result = thisArg[key](...arr);
delete thisArg[key];
}
return result;
};
apply函数实现
Function.prototype.ltapply = function(thisArg, arr) {
var result = undefined;
var fn = this;
thisArg = thisArg ? Object(thisArg) : window;
thisArg.fn = fn;
var symbol = Symbol();
thisArg[symbol] = fn;
arr = arr ? arr : [];
var symbols = Object.getOwnPropertySymbols(thisArg);
for (key of symbols) {
result = thisArg[key](...arr);
delete thisArg[key];
}
return result;
};
bind函数实现
Function.prototype.ltbind = function(thisArg, ...arr) {
var fn = this;
thisArg = thisArg ? Object(thisArg) : window;
var symbol = Symbol();
thisArg[symbol] = fn;
arr = arr ? arr : [];
function proxyFn() {
var result = undefined;
var symbols = Object.getOwnPropertySymbols(thisArg);
for (key of symbols) {
result = thisArg[key](...arr);
delete thisArg[key];
return result;
}
}
return proxyFn;
};