Javascript构造函数返回绑定函数?

时间:2016-11-17 12:54:36

标签: javascript

我的一些同事和我一直在尝试从构造函数中返回绑定函数。

这使我们能够制作这些“构建”的功能。其他功能,无需调用buildDispatcherprepareAddition。让我举个例子:



function addition(a, b) {
  return a + b;
}

function buildOffsetter(a) {
  return (b) => addition(a, b);
}

var offsetter = buildOffsetter(42);

console.log(offsetter(10));




如果我改用构造函数,我可以这样做:



function addition(a, b) {
  return a + b;
}

function Offsetter(a) {
  return (b) => addition(a, b);
}

var offsetter = new Offsetter(42);

console.log(offsetter(10));




现在,一个更现实的例子可能如下所示:



function dispatchDataToUrl(url, data) {
  $.ajax({
    type: "POST",
    url: url,
    data: data,
    error: () => console.log(`An error happened when sending [${data}] to [${url}].`) 
  });
}

function buildDispatcher(url) {
  return (data) => dispatchDataToUrl(url, data);
}

var dispatcher = buildDispatcher("http://stackoverflow.com");

dispatcher("stackoverflow rocks");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

可以像这样构建:

&#13;
&#13;
function dispatchDataToUrl(url, data) {
  $.ajax({
    type: "POST",
    url: url,
    data: data,
    error: () => console.log(`An error happened when sending [${data}] to [${url}].`) 
  });
}

function Dispatcher(url) {
  return (data) => dispatchDataToUrl(url, data);
}

var dispatcher = new Dispatcher("http://stackoverflow.com");

dispatcher("stackoverflow rocks");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

所以,我们真的不喜欢这些&#34; build&#34; -functions返回绑定函数。

我的问题是,这有什么缺点吗?是否有一些隐藏的陷阱,我们还没有偶然发现?

1 个答案:

答案 0 :(得分:3)

x = new Something()其中Something返回一个对象与<{1}}完全相同 * ,只是x = Something()浪费了一些资源来分配一个新对象这最终被扔掉了。因此,newbuildOffsetter之间唯一的实际差异就是命名。至于缺点,分配你不会使用的内存是一个坏主意。

*如果Offsetter是构造函数,并且您不依赖于Something。功能