Javascript对象引用模式

Javascript对象引用模式,javascript,performance,closures,Javascript,Performance,Closures,我有一个目标: var callback = { onValueChange: function () { }, onTabPressed: function () { }, onFocus: function () { } }; 在我的页面上,我有不同的编辑器,如textEditor和numericEditor,我分别绑定它们: function bindEditors() { var editors = $(".editor"); editors.e

我有一个目标:

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);
    });
};
我的问题是:

回调
对象保留在绑定函数之外可以吗?不是每个绑定函数都会创建
回调
对象的副本吗?(使用额外内存)

或者我应该将
回调
对象作为参数传递给每个绑定函数吗?

1)可以将回调对象保留在绑定函数之外吗

绝对是

2) 不是每个绑定函数都会创建回调对象的副本吗

没有

3) 还是应该将回调对象作为参数传递给每个绑定函数?
不。

它不创建封闭对象的副本,只对同一对象进行引用,所以我不担心这一点。我绝对不会将回调作为参数传递

我不认为你写的东西有什么疯狂的错误,但是如果你想降低代码的复杂性,你可以只绑定一次,然后在绑定本身内部进行切换:

$(".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);
});
这可能不会有任何不同,但它更干净