使用或不使用call方法调用作为参数传递给函数的对象方法

时间:2015-04-15 19:36:32

标签: javascript object methods call

var exe = {};
exe.print = 'Alphabet ';
exe.showLetter = function(val) {
    console.log(this.print+' is : '+val);
}

//var process = function(cb) { //case1
//var process = function(obj,str) { //case2
//var process = function(cb,obj) { //case3

var process = function(cb,str) { //case 4
    ['A', 'B', 'C', 'D'].forEach(function(lett) {
        if(lett == 'C') {
            //cb(lett); //case1
            //obj[str].call(obj, lett); //case2
            //cb.call(obj, lett); //case3

            cb[str](lett); //case4


        }   
    })
}

//process(exe.showLetter); //undefined is : C , because 'this' points to window, case1
//process(exe, 'showLetter'); //Alphabet  is : C , case2
//process(exe.showLetter, exe); //Alphabet  is : C, case3

process(exe, 'showLetter'); //case4, without using call, Alphabet  is : C

从上面提供的示例中,使用call有什么好处?或者case2case3case4是一样的吗?将对象本身传递给process函数也会显示正确的输出!

在此处使用call是否重要?如果不使用call,是否会出错? (case2case3是变体而case1会出错,因为this指向窗口,因为进程是全局函数)

如果我理解错误,请纠正我。

0 个答案:

没有答案