在javascript中调用vs传递对象

时间:2013-07-25 09:11:29

标签: javascript

我最近在一些我一直关注的教程中使用了调用,但我更习惯于传递对象。我想知道最好使用电话。什么是最有效的方式?

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我会坚持将对象传递给函数,只要你能以这种方式构造函数。 我看到call更像是一个实用程序,如果函数不能再被更改,你真的必须注入一个不同的this上下文。 另外,如果您的函数与要调用函数的某个对象非常接近,请考虑使用prototype方法。

此外,call的效果不如将对象传递给函数,因为注入不同的this会产生一些开销。

答案 1 :(得分:0)

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

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将在窗口加载时调用,每次复选框选中状态更改