function People(){
}
People.prototype = {
age: 26,
say: function(){
alert(this.age)
}
}
new People().say() // 26
//如果此时有个child对象,也想使用say方法,但是我不想再b对象下在定义一个同样功能的say方法,此时call,apply就派上用场了
var child = {age: 38};
new People().say.call(child) //38
从这里可以看出,其实call或者apply都是为了动态改变this指针而出现的child本身没有say()方法,却希望使用say方法,所有使用call,将people类的指针动态指向child,从而alert自己的age参数
function a(){
console.log(Array.prototype.slice.call(arguments));
}
a(1,2,3,4,5) //[1, 2, 3, 4, 5]
像arguments这种类数组对象,可以调用Array的slice方法来将arguments进行分割处理(arguments是类数组对象,可以理解为[1,2,3,4,5].slice())
apply、call的不同之处
function foo(arg1,arg2){
console.log(arg1,arg2)
}
var c = {}
foo.call(c,1,2,3) //1,2
foo.apply(c,[1,2,3]) //1,2
不同之处就在于call和apply的参数传入方式不同。
网友评论