bind手写代码
时间: 2023-07-02 10:18:23 浏览: 53
好的,下面是一个简单的bind手写代码示例:
```javascript
function myBind(func, context) {
return function() {
func.apply(context, arguments);
};
}
```
这个函数接受两个参数,第一个是需要绑定的函数,第二个是需要绑定到函数上的上下文对象。它返回一个新的函数,该函数将原始函数绑定到指定的上下文对象上。当新函数被调用时,它将以指定的上下文对象作为“this”关键字,并将所有传递给它的参数传递给原始函数。
使用示例:
```javascript
var person = {
name: "Alice",
sayHi: function() {
console.log("Hi, my name is " + this.name);
}
};
var boundFunc = myBind(person.sayHi, person);
boundFunc(); // 输出:Hi, my name is Alice
```
在这个示例中,我们将“person.sayHi”函数绑定到“person”对象上,并将返回的函数存储在“boundFunc”变量中。当我们调用“boundFunc”函数时,它将以“person”对象作为上下文对象,并输出“Hi, my name is Alice”。
相关问题
改变this指向手写bind
好的,下面是手写实现bind方法并改变函数this指向的示例代码:
```javascript
Function.prototype.myBind = function(context) {
var self = this;
return function() {
return self.apply(context, arguments);
};
};
```
这个函数使用了原型链的方式来给所有函数添加一个myBind方法。myBind方法接受一个上下文对象作为参数,并返回一个新的函数。当新函数被调用时,它将以指定的上下文对象作为“this”关键字,并将所有传递给它的参数传递给原始函数。
使用示例:
```javascript
var person1 = {
name: "Alice",
sayHi: function() {
console.log("Hi, my name is " + this.name);
}
};
var person2 = {
name: "Bob"
};
person1.sayHi.myBind(person2)(); // 输出:Hi, my name is Bob
```
在这个示例中,我们使用“person1.sayHi.myBind(person2)”来创建一个新的函数,该函数将“person1.sayHi”函数绑定到“person2”对象上。我们立即调用返回的新函数,并输出“Hi, my name is Bob”。这是因为新函数中的this指向了“person2”对象。
手写call apply bind方法
手写call方法:
```
Function.prototype.myCall = function(context) {
context = context || window;
context.fn = this;
var args = [...arguments].slice(1);
var result = context.fn(...args);
delete context.fn;
return result;
}
```
手写apply方法:
```
Function.prototype.myApply = function(context, arr) {
context = context || window;
context.fn = this;
var result;
if (!arr) {
result = context.fn();
} else {
result = context.fn(...arr);
}
delete context.fn;
return result;
}
```
手写bind方法:
```
Function.prototype.myBind = function(context) {
var self = this;
var args = [...arguments].slice(1);
return function() {
var bindArgs = [...arguments];
return self.apply(context, args.concat(bindArgs));
}
}
```
这些代码中的"context"是指调用这个方法时传入的对象, "args" 是传入的参数, 它们都是可选的.
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)