我有一个对象:
var callback = {
onValueChange: function () { },
onTabPressed: function () { },
onFocus: function () { }
};
在我的页面上,我有不同的编辑器,例如textEditor
和numericEditor
,我将它们分开绑定:
function bindEditors() {
var editors = $(".editor");
editors.each(function (i) {
var editor = $(this);
var editorType = editor.attr("data-editorType");
if (editorType == "textEditor") {
bindTextEditor(editor);
} else if (editorType == "numericEditor") {
bindNumericEditor();
}
});
};
function bindTextEditor(editor) {
editor.bind("change", function () {
// calculate value
callback.onValueChange($(this), value);
});
};
function bindNumericEditor(editor) {
editor.bind("change", function () {
// calculate value
callback.onValueChange($(this), value);
});
};
我的问题是:
可以将callback
对象保留在绑定函数之外吗?每个绑定函数都不会创建callback
对象的副本吗? (使用额外的内存)
或者我应该将callback
对象作为参数传递给每个绑定函数吗?
答案 0 :(得分:1)
1)可以将回调对象保留在绑定函数之外吗?
绝对!
2)每个绑定函数都不会创建回调对象的副本吗?
没有
3)或者我应该将回调对象作为参数传递给每个绑定函数? 没有。
答案 1 :(得分:1)
它不会创建所包含对象的副本,只是对同一对象的引用,所以我不担心。我肯定不会将回调作为参数传递。
我认为你所编写的内容并没有任何重大错误,但是如果你想减少代码的复杂性,你可以将它绑定一次并在绑定本身内进行切换:
$(".editor").bind("change", function(){
var editor = $(this);
var editorType = editor.attr("data-editorType");
if (editorType == "textEditor") {
//calculate value
} else if (editorType == "numericEditor") {
//calculate value
}
callback.onValueChange(editor, value);
});
这可能没有任何不同,但它更清洁。