1. 使用call()
和apply()
方法
call()
和apply()
方法都可以用来调用一个函数,并显式地设置this
的值。它们之间的主要区别是call()
方法接受一个参数列表,而apply()
方法接受一个包含多个参数的数组。
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = {
name: 'John'
};
// 使用call
greet.call(person, 'Hello', '!');
// 输出: Hello, John!
// 使用apply
greet.apply(person, ['Hi', '.']);
// 输出: Hi, John.
2. 使用箭头函数
箭头函数不绑定自己的this
,它会捕获其所在上下文的this
值作为自己的this
值,并且这个绑定在函数创建时就完成了。
const person = {
name: 'Jane',
greet: function() {
setTimeout(() => {
console.log(this.name); // this指向person对象
}, 1000);
}
};
person.greet(); // 输出: Jane
3. 使用bind()
方法
bind()
方法会创建一个新的函数,在bind()
被调用时,这个新函数的this
被指定为bind()
的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = {
name: 'Doe'
};
const greetDoe = greet.bind(person, 'Howdy', '!');
greetDoe(); // 输出: Howdy, Doe!
4. 在构造函数中使用new
关键字
当使用new
关键字调用构造函数时,this
会被绑定到新创建的对象上。
function Person(name) {
this.name = name;
this.greet = function() {
console.log('Hello, ' + this.name);
};
}
const person = new Person('Alice');
person.greet(); // 输出: Hello, Alice
标签:function,name,指向,person,greet,js,改变,call,apply
From: https://blog.csdn.net/weixin_50012993/article/details/140549663