语法
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)//赵六