博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于javascript中apply()和call()方法的区别
阅读量:6149 次
发布时间:2019-06-21

本文共 1282 字,大约阅读时间需要 4 分钟。

call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2,  , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

 

说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。

引用网上一个代码段,运行后自然就明白其道理。

 

<
input 
type
="text"
 id
="myText"
   value
="input text"
>
<
script
>
    
function
 Obj(){
this
.value
=
"
对象!
"
;}
    
var
 value
=
"
global 变量
"
;
    
function
 Fun1(){alert(
this
.value);}
    window.Fun1();   
//
global 变量
    Fun1.call(window);  
//
global 变量
    Fun1.call(document.getElementById('myText'));  
//
input text
    Fun1.call(
new
 Obj());   
//
对象!
</
script
>

call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:

<
script
>
   
var
 func
=
new
 
function
(){
this
.a
=
"
func
"
}
    
var
 myfunc
=
function
(x){
        
var
 a
=
"
myfunc
"
;
        alert(
this
.a);
        alert(x);
    }
    myfunc.call(func,
"
var
"
);
</
script
>

可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入

转载于:https://www.cnblogs.com/cc258/archive/2012/04/21/2462547.html

你可能感兴趣的文章
我的友情链接
查看>>
Java GC专家系列1:理解Java垃圾回收
查看>>
android 安全讲座第四层 手机Root授权原理细节全解析(3)
查看>>
N5-用两个栈来实现一个队列
查看>>
extman后台登陆问题No such file or directory
查看>>
在Linux下安装邮件服务器Qmail(一)
查看>>
正则表达式--口诀
查看>>
Mysql的转义字符
查看>>
让软件适用于域环境
查看>>
windows 上搭建laravel框架
查看>>
Android dp、dpi、px
查看>>
华为路由AR1220拨号问题求各位大侠解决
查看>>
JSP页面获取集合的长度
查看>>
Zabbix 使用nginx做web服务
查看>>
开发文档的编写(1)
查看>>
try--catch--finally中return返回值执行的顺序(区别)
查看>>
【转】聚集索引和非聚集索引的区别
查看>>
【转】名企HR教你如何过网申
查看>>
【C#】性能计数器
查看>>
cifs协议端口
查看>>