js手写call bind apply
时间: 2023-12-06 16:04:01 浏览: 92
js代码-手写call/bind/apply
好的,以下是手写 `call`、`bind` 和 `apply` 的实现:
```javascript
// 手写 call
Function.prototype.myCall = function(context, ...args) {
context = context || window;
const fn = Symbol();
context[fn] = this;
const result = context[fn](...args);
delete context[fn];
return result;
}
// 手写 apply
Function.prototype.myApply = function(context, args) {
context = context || window;
const fn = Symbol();
context[fn] = this;
const result = context[fn](...args);
delete context[fn];
return result;
}
// 手写 bind
Function.prototype.myBind = function(context, ...args1) {
const self = this;
return function(...args2) {
context = context || this;
return self.apply(context, [...args1, ...args2]);
}
}
```
这些方法的核心思想都是通过改变 `this` 的指向来实现调用函数,并且在调用完毕后删除添加到 `context` 对象中的临时属性。其中,`bind` 方法需要返回一个新函数,因此我们可以使用闭包来保存 `this` 和 `args1`,并在返回的函数中重新调用原函数。
阅读全文