Javascript对象引用模式

时间:2013-05-30 07:12:32

标签: javascript performance closures

我有一个对象:

var callback = {
    onValueChange: function () { },
    onTabPressed: function () { },
    onFocus: function () { }
};

在我的页面上,我有不同的编辑器,例如textEditornumericEditor,我将它们分开绑定:

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对象作为参数传递给每个绑定函数吗?

2 个答案:

答案 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);
});

这可能没有任何不同,但它更清洁。