JavaScript中apply与call的区别及用法详解
本文详解JavaScript中apply与call方法的用法。两者均用于动态改变函数执行时的this指向,实现方法复用。call接收参数列表,apply接收参数数组。通过对象方法借用和DOM节点转换数组等实例,展示其核心应用场景与区别。
您可以直接参考后续示例,或先阅读基础介绍。
apply与call的核心作用
call和apply方法的引入旨在动态改变函数执行时的this指向。当某个对象缺乏特定方法,而其他对象拥有该方法时,可以通过call或apply借用其他对象的方法来执行操作。
call和apply是Function.prototype的方法,由JavaScript引擎内部实现。由于挂载在Function.prototype上,每个Function对象实例(即每个函数)都具备这两个属性。作为方法的属性,它们的使用场景针对函数。尽管两者作用相同,但使用方式存在差异。综上所述,call和apply用于改变调用方法时的this指针。
基础示例如下。
call方法的使用示例
call方法演示
function A() {
this.getName = function (xx) {
return xx;
}
}
function B() {
}
var a = new A();
console.log( a.getName('i am A') ); //i am A
var b = new B() ;
console.log( a.getName.call(b,'i am B') ); // i am B
假设B函数未定义任何方法,而A函数拥有getName()方法。此时a.getName()执行正常,若B也需要使用getName(),可通过call(this, '参数')实现。
进一步理解:借助call或apply调用其他对象的方法,其核心在于动态改变this指向。原本a.getName()中的this指向对象a,使用call后,this被动态指向对象b,从而执行b.getName()的逻辑。
apply方法的使用示例
apply方法演示
apply与call的主要区别仅在于参数传递方式的不同。
function A() {
this.sun = function (a ,b) {
return a+b;
}
}
function B() {
}
var a = new A();
console.log( a.sun(1,2) ); //3
var b = new B() ;
console.log( a.sun.call(b,2,2) ); // 4
console.log( a.sun.apply(b,[3, 3]) ); //6
常见应用场景分析
常见应用场景分析
通过document.getElementsByTagName获取的DOM节点集合属于类数组对象,无法直接使用Array原型下的push、pop等方法。可通过以下方式解决:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
经过上述转换,domNodes即可使用Array原型下的所有方法。
以上内容为本文全部讲解,希望有助于您的学习,欢迎继续支持本站。
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
