浅谈Javascript中call()和apply()的区别

关于call和apply的那些事儿

语法

Javascript中每个function对象都有一个call()方法和一个apply()方法

apply()方法语法:
function.apply(thisObj[, argArray])

例如:B.apply(this,[arg1,arg2…,argn])

call()方法语法
function.call(thisObj[, arg1[, arg2[, [,...argN]]]])

例如:B.call(this,arg1,arg2…,argn)

异同

共同点:
都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。

不同点:
apply()中最多只能有两个参数:新的this对象、一个数组
如果需要给该方法传递多个参数,则需要将多个参数放进一个数组中,如果是一个参数,也要写在数组中

call()中可以有多个参数:新的this对象、参数列表

实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。


this的指向

要理解函数更改了this指向,就需要了解this的指向:

内部函数的this指向obj

var name="张三";
var age=18;
var obj={
    name:'李四',
    objage:this.age,  
    myfun1:function(){
        console.log(this.name+''+this.age+''+this.objage)
    }
}
obj.myfun1()//李四undefined18

全局声明的函数this指向window

var name="张三";
function myfun2(){
    console.log(this.name)
}
myfun2()//张三

重定义this指向:

var obj1={
    name:'王五',
    myfun3:function(){
        console.log(this.name);
    }
}
var obj2={
     name:'赵六'
}
obj1.myfun3.call(obj2)//赵六
obj1.myfun3.apply(obj2)//赵六
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值