我的一些同事和我一直在尝试从构造函数中返回绑定函数。
这使我们能够制作这些“构建”的功能。其他功能,无需调用buildDispatcher
或prepareAddition
。让我举个例子:
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;
可以像这样构建:
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;
所以,我们真的不喜欢这些&#34; build&#34; -functions返回绑定函数。
我的问题是,这有什么缺点吗?是否有一些隐藏的陷阱,我们还没有偶然发现?
答案 0 :(得分:3)
x = new Something()
其中Something
返回一个对象与<{1}}完全相同 * ,只是x = Something()
浪费了一些资源来分配一个新对象这最终被扔掉了。因此,new
和buildOffsetter
之间唯一的实际差异就是命名。至于缺点,分配你不会使用的内存是一个坏主意。
*如果Offsetter
是构造函数,并且您不依赖于Something
。功能