// 手写实现call方法
Function.prototype._call = function (context = window, ...args) {
// this指向函数调用者 此时指向原函数
context.callback = this;
// 此时callback 调用时 this指向的是ctx(指向调用者)
const result = ctx.callback(...args);
delete context.callback;
return result;
};
// 手写实现call方法(跟call方法类似 只不过参数是数组)
Function.prototype._apply = function (context = window, args) {
if (!(args instanceof Array)) throw Error("_apply第二个参数必须为数组");
// this指向函数调用者 此时指向原函数
context.callback = this;
// 此时callback 调用时 this指向的是ctx(指向调用者)
const result = context.callback(...args);
delete ctx.callback;
return result;
};
// 实现bind方法
Function.prototype._bind = function (context = window, ...args) {
// 原型上添加mybind方法
const self = this; // 调用的方法本身
return function () {
// 返回一个待执行的方法
self.apply(context, [...args, ...arguments]); // 合并两args
};
};
js手写实现 call apply bind
最新推荐文章于 2024-11-04 16:17:23 发布