call方法能立即执行函数并指定this指向,语法为func.call(thisarg, arg1, arg2, ...),常用于借用方法、处理类数组等场景。

JavaScript 中 call 方法能立即执行函数,并把函数内部的 this 指向你指定的对象。
call 的基本用法
call 是函数对象上的一个方法,语法是:func.call(thisArg, arg1, arg2, ...)
-
thisArg:你想让函数里
this指向的那个对象;传null或undefined在非严格模式下会自动变成全局对象(如浏览器中的window) - arg1, arg2, ...:按顺序传给函数的实际参数
改变 this 指向的典型场景
比如有个对象方法想借给另一个对象用:
const person = {
name: '小明',
sayHi: function(greeting) {
console.log(`${greeting}, 我是${this.name}`);
}
};
const other = { name: '小红' };
person.sayHi.call(other, '你好'); // 输出:你好,我是小红
这里 sayHi 原本属于 person,但通过 call 把它“临时借给” other 执行,this 就指向了 other。
和 apply、bind 的区别
call 和 apply 都是立即调用,区别只在传参方式:
-
call:参数逐个列出,如fn.call(obj, a, b, c) -
apply:参数用数组传,如fn.apply(obj, [a, b, c]) -
bind:不执行,返回一个新函数,this被永久绑定,后续调用时再传参
实际开发中常用的小技巧
比如借用数组方法处理类数组(如 arguments 或 NodeList):
function example() {
// arguments 不是真正的数组,没有 forEach
Array.prototype.forEach.call(arguments, item => {
console.log(item);
});
}
example('a', 'b', 'c'); // 分别打印 a、b、c
或者把 document.querySelectorAll 返回的节点列表转成数组:
const nodeList = document.querySelectorAll('div');
const arr = Array.prototype.slice.call(nodeList);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











