将对象属性作为函数参数传递的好策略/模式是什么?

时间:2016-01-14 18:52:43

标签: javascript

这就是我所拥有的:

var url = config_ajax.url;
xhr.addEventListener("progress", function(evt, url){
  if (evt.lengthComputable) {
    var percent = ( evt.loaded / evt.total ) * 100;
    console.log(url);
    Pub.ajaxIndicator(percent);
  }
}, false);

我认为它看起来很糟糕,但JS不喜欢将config_ajax.url传递给函数和错误。

1 个答案:

答案 0 :(得分:2)

  

实际上它创建了一个闭包并且可以访问,但我明确地传递它,但它是一个回调所以我认为不可能。

你是对的。回调是一个闭包,你不能明确传递给它。当调用该函数时,您只能将值传递给函数。但是你没有调用回调,它被称为 你。您无法控制传递给它的URL。

我猜你可以使用.bind()将第一个参数设置为特定值,如果你觉得更清洁:

function showProgress(url, evt) {
  if (evt.lengthComputable) {
    var percent = ( evt.loaded / evt.total ) * 100;
    console.log(url);
    Pub.ajaxIndicator(percent);
  }
}

xhr.addEventListener("progress", showProgress.bind(null, config_ajax.url), false);

我建议您熟悉闭包,JavaScript中有一个通用且非常强大的工具。例如。没有理由创建url,您也可以在回调中直接访问config_ajax