返回
this,apply、call
前端
2023-10-03 01:40:44
前言
在JavaScript中,this是一个非常重要的,它用于指向当前执行代码的对象。this的指向可以根据函数的调用方式而改变,这可能会导致一些混淆和错误。apply和call方法是两个可以帮助我们控制this指向的函数,它们允许我们指定this指向的对象,无论该函数是如何被调用的。
this的指向
在JavaScript中,this的指向始终坚持一个原理:“this永远指向最后调用它的那个对象”,切记这句话。下面看几个例子。
例一:最基本的使用,函数say是obj调用的,函数中的this指向obj
const obj = {
name: 'obj',
say: function() {
console.log(this.name); // obj
}
};
obj.say(); // obj
例二:使用new关键字调用函数,this指向新创建的对象
function Person(name) {
this.name = name;
this.say = function() {
console.log(this.name); // John
}
}
const person = new Person('John');
person.say(); // John
例三:函数作为参数传递给另一个函数,this指向调用它的函数
const obj = {
name: 'obj',
say: function() {
console.log(this.name); // obj
}
};
function callSay(func) {
func();
}
callSay(obj.say); // obj
apply和call方法
apply和call方法都是用来改变this指向的函数,它们的区别在于参数的传递方式。apply方法接受两个参数,第一个参数是this要指向的对象,第二个参数是一个数组,包含要传递给函数的参数。call方法也接受两个参数,第一个参数是this要指向的对象,第二个参数是传递给函数的第一个参数,第三个参数是传递给函数的第二个参数,以此类推。
下面看一个例子:
const obj = {
name: 'obj',
say: function(arg1, arg2) {
console.log(this.name, arg1, arg2);
}
};
obj.say('hello', 'world'); // obj hello world
// 使用apply方法
apply(obj, ['hello', 'world']); // obj hello world
// 使用call方法
call(obj, 'hello', 'world'); // obj hello world
总结
this关键字、apply和call方法是JavaScript中非常重要的概念,它们可以帮助我们理解函数的作用域和绑定。通过熟练掌握这些概念,我们可以写出更加健壮和可维护的代码。