JavaScript Tips: call vs apply

JavaScript 中的callapply方法主要用来改变函数对象的上下文,即函数中this所指向的内容。

调用方法如下:

fun.call(obj1, arg1, arg2, ...);
fun.apply(obj2, [arrs]);

具体示例:

var Obj1 = {
    name: 'Object1',
    say: function(p1, p2) {
        console.log(this.name + ' says ' + p1 + ' ' + p2);
    }
};

// logs 'Object1 says Good morning'
Obj1.say('Good', 'morning');

var Obj2 = {
    name: 'Object2'
};

// logs 'Object2 says Good afternoon'
Obj1.say.call(Obj2, 'Good', 'afternoon');

// logs 'Object2 says Good afternoon again'
Obj1.say.apply(Obj2, ['Good', 'afternoon again']);

通过示例可以看出,通过常规方式调用say的时候,方法中的this指向Obj1,而通过callapply调用的时候,this却指向了Obj2

通过示例可以看出,callapply的作用是完全相同的,其调用方法的区别也只是参数列表不同罢了。

Demo: http://jsfiddle.net/akasuna/62AzT/

Posted on 2012-06-18

No Comments

Leave a Comment