Javascript中bind,call,apply模拟实现
程序员文章站
2022-07-14 14:27:40
...
Function.prototype.bindFake = function(context) {
let fn = this;
let arr = Array.prototype.slice.call(arguments, 1);
return function() {
let innerArgs = Array.prototype.slice.call(arguments);
let args = arr.concat(innerArgs);
fn.apply(context, args);
}
}
Function.prototype.callFake = function(context) {
let context = context || window;
context.fn = this;
let arr = [];
let result;
for(let i = 1; i < arguments.length; i++) {
arr.push('arguments[' + i + ']');
}
if (arr) {
result = eval('context.fn(' + arr + ')');
} else {
result = context.fn();
}
delete context.fn;
return result;
}
Function.prototype.applyFake = function(context, arr) {
let context = context || window;
context.fn = this;
let result;
if (arr) {
let args = [];
for(let i = 0; i< arr.length; i++) {
args.push('arr[' + i + ']');
}
result = eval('context.fn(' + args + ')');
} else {
result = context.fn();
}
delete context.fn;
return result;
}
推荐阅读
-
javascript中apply、call和bind的使用区别
-
Javascript中apply、call、bind的用法讲解
-
浅谈JavaScript中的apply/call/bind和this的使用
-
javascript中call,apply,bind函数用法示例
-
实现 call、apply、bind
-
【转】javascript笔记之apply、call、bind用法
-
使用JS简单实现apply、call和bind方法的实例代码
-
JavaScript中的this,call,apply使用及区别详解
-
使用JS简单实现apply、call和bind方法的实例代码
-
JavaScript 中 apply 、call 的详解