js 改变this指向
时间: 2023-04-04 14:02:03 浏览: 70
可以使用 call、apply、bind 方法来改变 this 指向。其中,call 和 apply 是直接调用函数并传入参数,bind 是返回一个新的函数并指定 this 指向。例如:
function sayName() {
console.log(this.name);
}
var person1 = {
name: 'Alice'
};
var person2 = {
name: 'Bob'
};
sayName.call(person1); // 输出 Alice
sayName.apply(person2); // 输出 Bob
var sayNamePerson1 = sayName.bind(person1);
sayNamePerson1(); // 输出 Alice
相关问题
JS 改变this指向
在 JavaScript 中,可以使用以下方法来改变函数中的 `this` 指向:
1. 使用 `bind` 方法:`bind` 方法创建一个新的函数,其 `this` 值被绑定到指定的对象。例如:
```javascript
function sayHello() {
console.log("Hello, " + this.name);
}
const obj = { name: "John" };
const boundFunc = sayHello.bind(obj);
boundFunc(); // 输出:Hello, John
```
2. 使用箭头函数:箭头函数会继承其父级作用域的 `this` 值,不会创建自己的 `this`。例如:
```javascript
const obj = {
name: "John",
sayHello: function() {
const innerFunc = () => {
console.log("Hello, " + this.name);
};
innerFunc();
}
};
obj.sayHello(); // 输出:Hello, John
```
3. 使用 `call` 或 `apply` 方法:`call` 和 `apply` 方法立即调用函数,并且显式指定函数内的 `this` 值。例如:
```javascript
function sayHello() {
console.log("Hello, " + this.name);
}
const obj = { name: "John" };
sayHello.call(obj); // 输出:Hello, John
sayHello.apply(obj); // 输出:Hello, John
```
这些方法可以帮助你在 JavaScript 中改变函数的 `this` 指向。
js如何改变this指向
1. 使用call()方法或apply()方法来改变this指向,这两个方法的第一个参数都是要改变this指向的对象,第二个参数是传入函数的参数列表,call()方法是一个一个传入,apply()方法是以数组的形式传入。
示例:
```
function showName() {
console.log(this.name);
}
var person1 = { name: "Alice" };
var person2 = { name: "Bob" };
showName.call(person1); // 输出 "Alice"
showName.call(person2); // 输出 "Bob"
showName.apply(person1); // 输出 "Alice"
showName.apply(person2); // 输出 "Bob"
```
2. 使用bind()方法来改变this指向,该方法会返回一个新的函数,这个函数的this指向被绑定到bind()方法的第一个参数所指定的对象。
示例:
```
function showName() {
console.log(this.name);
}
var person1 = { name: "Alice" };
var person2 = { name: "Bob" };
var showPerson1Name = showName.bind(person1);
var showPerson2Name = showName.bind(person2);
showPerson1Name(); // 输出 "Alice"
showPerson2Name(); // 输出 "Bob"
```