1

ive been using call a bit recently in some tutorials I've been following but am more used to passing the object. I was wondering is it best to use call. What's the most efficient way?

var editor = function(someParam){
 //do something with this
}

var testFunction function(someParam){
  editor.call(this, someParam);
} 

or

var editor = function(obj, someParam){
  var self = obj;
}

var testFunction function(someParam){
  editor(this, someParam);
}
4

2 回答 2

2

只要您可以以这种方式构造函数,我就会坚持将对象传递给函数。call如果函数不能再更改并且您确实必须注入不同的this上下文,我认为它更像是一个实用程序。此外,prototype如果您的函数非常接近您想要调用该函数的某个对象,请考虑使用该方法。

此外,call将不如将对象传递给函数的性能,因为不同的注入this有一些开销。

于 2013-07-25T09:18:48.447 回答
0

在某些情况下 call 非常有用,例如在添加事件处理程序时:

window.addEventListener('load', function(){
    var cb = document.getElementById('myCheckBox');
    cb.addEventListener('change', onchange);
    onchange.call(cb); // sets `cb` as `this` in `onchange` function
});

function onchange(){
    // I'm using 'this' for current element
    if(this.checked)
       alert('checked');
}

在这种情况下,onchange 将在窗口加载时调用,并且每次复选框选中状态发生变化

于 2013-07-25T11:37:27.110 回答