2013-03-10 151 views
0
function name(elements){ 

    init(elements); 

    var ret = { 
     add : function(more){ 
      $.extend(elements, more); 
      init(more); 
     } 
    } 

    function init(el){ 
     $.each(el,function(name, selector){ 
      //some stuff.... 
     }); 
    } 

    return ret; 
} 

我用這個結構(我已經通過自己創建)非常多......這是非常簡單好做的認爲這樣不使用對象:JavaScript函數參考的最佳實踐

var reference = name({ one : $('#one'), two : $('#two') }); 

//and in a second moment... 
reverence.add({ three : $('#tree') }); 

這是一種好的做法,還是不是?使用對象和空間會更好嗎?爲什麼?

+0

這個目標結構會有什麼問題?順便說一句,似乎沒有辦法再次訪問'元素'。 – Bergi 2013-03-10 21:05:28

回答

1

在我看來,構造函數和原型(JavaScript等價於傳統類)導致更易讀和可維護的代碼。我不得不三次讀取你的例子,找出它在做什麼(基本上,用'add'方法創建一個字典結構)。

原型更多的是javascript-y,並且使用一個常見而且衆所周知的範例 - 對其他人來說要簡單得多,或者從現在開始兩年後再回顧並理解。

考慮以下多麼容易是閱讀:

/** @constructor */ 
function Name(elememts) { 
    this.elements = this._init(elements) 
} 

Name.prototype.add = function(more) { 
    $.extend(this.elements, this._init(more)); 
} 

Name.prototype._init = function(elements) { 
    // some stuff... 
} 

你的方法確實得到隱藏私人功能的優勢。對於傳統的原型繼承,沒有「私有」關鍵字,所以您應該記住不要從對象本身之外調用私有方法。 (谷歌的Closure編譯器確實有一個@private註釋,它會幫助你執行它,但它不完全是一個完美的系統。)

0

我建議你使用閉包......它們是JavaScript中強大的東西......: )

var status = function (status) { 
return { 
get_status: function () { 
return status; 
} 
}; 
}; 

// Make an instance of status. 
    var myStatus = status("amazed"); 
    document.writeln(myStatus.get_status()); 
+0

這不正是OP在做什麼? – Bergi 2013-03-10 21:06:33