我最近在一些我一直关注的教程中使用了调用,但我更习惯于传递对象。我想知道最好使用电话。什么是最有效的方式?
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);
}
答案 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将在窗口加载时调用,每次复选框选中状态更改