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有什么好处?或者case2
,case3
和case4
是一样的吗?将对象本身传递给process
函数也会显示正确的输出!
在此处使用call
是否重要?如果不使用call
,是否会出错?
(case2
和case3
是变体而case1
会出错,因为this
指向窗口,因为进程是全局函数)
如果我理解错误,请纠正我。