0

我有一个对象:

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

在我的页面上,我有不同的编辑器,比如textEditorand 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对象作为参数传递给每个绑定函数?

4

2 回答 2

1

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

绝对地!

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

不。

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

于 2013-05-30T07:15:12.520 回答
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);
});

这可能没有任何不同,但它更干净。

于 2013-05-30T07:19:57.067 回答