call(), apply(), bind() 都是 JavaScript 中常用的函数方法。它们可以指定函数中的 this 指向哪个对象,以及传递参数给函数。三者的用法不同。
call()的作用是将函数的this值设置为一个特定的对象,并且在特定的对象上调用函数,同时可以传递多个参数。apply()方法调用一个函数,并设置函数内部的this值为一个特定的对象,同时传入一个包含多个参数的数组作为函数的参数。bind()可以用于创建一个新的函数,并将它的this值设置为一个特定的对象。bind()的作用是将函数绑定在特定的对象上,并返回一个函数引用,此时 this关键字指向绑定的对象。
call
- 在Javascript中,
call()是一个函数方法,用于在函数执行时指定函数中的this关键字。 call()的作用是将函数的this值设置为一个特定的对象,并且在特定的对象上调用函数,同时可以传递多个参数。
基本语法:
function.call(thisArg, arg1, arg2, arg3, ...)
其中:
- function:要调用的函数。
- thisArg:用于设置函数中this的值的对象。
- arg1, arg2, arg3, ...:调用函数时传递的参数列表。
注意,thisArg是第一个参数,它是必需的,其他的参数是可选的。如果没有传递任何参数,可以将null或undefined传递给thisArg。
示例代码:
function sayHi(greeting, message) {
console.log(greeting + ', ' + message + ', ' + this.firstName + ' ' + this.lastName);
}
var person = {
firstName: 'hello',
lastName: 'world'
};
sayHi.call(person, '你好', '欢迎来到我的世界'); // 输出 "你好, 欢迎来到我的世界, hello world"
在上面的例子中,我们使用call()方法在调用 sayHi函数 时将其 this值 设置为person对象,从而访问到person对象中的firstName和lastName属性。如此一来,函数的输出结果将为"你好, 欢迎来到我的世界, hello world"。
如果我们再加一个parsen2,用sayHi.call(person2),那么this值 就是person2对象。
function sayHi(greeting, message) {
console.log(greeting + ', ' + message + ', ' + this.firstName + ' ' + this.lastName);
}
var person = {
firstName: 'hello',
lastName: 'world'
};
var person2 = {
firstName: '你好',
lastName: '世界'
};
sayHi.call(person2, '你好', '欢迎来到我的世界'); // 输出 "你好, 欢迎来到我的世界, 你好 世界"
apply
在Javascript中,apply()是一个函数方法,同call()函数方法一样,可以用于设置函数中this的值,但apply()传递参数的方式略有不同。
apply()方法调用一个函数,并设置函数内部的this值为一个特定的对象,同时 传入一个包含多个参数的数组作为函数的参数。
示例代码:
function sayHi(greeting) {
console.log(greeting + ', ' + this.name + '!');
}
var person = {
name: 'hao'
};
// 使用 apply() 调用函数 sayHi(),将其中的 this 关键字设置为 person 对象,并传递一个包含字符串参数的数组
sayHi.apply(person, ['nice to meet you']);
在上面的例子中,我们使用apply()方法将sayHi()函数的 this关键字 设置为person对象,并通过传递包含'nice to meet you'字符串参数的数组来调用该函数。
调用以上代码时,控制台将输出nice to meet you, hao!。
bind
在Javascript中,bind()是一个函数方法,可以用于创建一个新的函数,并将它的this值设置为一个特定的对象。bind()方法与call()和apply()不同,它不会立即调用函数,而是返回一个新函数,可以稍后调用。
bind()的作用是将函数绑定在特定的对象上,并返回一个函数引用,此时 this关键字 指向绑定的对象。
示例代码:
var person = {
name: 'hello'
};
function sayHi(greeting) {
console.log(greeting + ', ' + this.name + '!');
}
// 使用 bind() 方法创建一个新函数,将其中的 this 关键字绑定到 person 对象上
var personSayHi = sayHi.bind(person);
// 调用新函数 personSayHi,传入一个字符串参数
personSayHi('nice to meet you');
在上面的例子中,我们使用bind()方法将sayHi()函数的this关键字设置为person对象,并将返回的新函数引用赋值给personSayHi。然后我们通过调用personSayHi()来执行该函数。
调用以上代码时,控制台将输出“nice to meet you, hello!”。