2013-05-30 123 views
0

我有一個目標:Javascript對象參考模式

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對象作爲參數傳遞給每個綁定函數嗎?

回答

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

這可能不會有任何不同,但它更乾淨。

1

1)可以保持回調對象超出綁定函數嗎?

絕對!

2)是不是每個綁定函數都會創建一個回調對象的副本?

3)或者我應該通過回調對象作爲參數傳遞給每個的結合功能是什麼? 編號