2010-05-13 107 views
2

我一直在搞亂jQuery插件代碼,我試圖把所有的公共變​​量放到一個單一的對象中,以方便訪問。我已經在下面列出了幾個關於我如何完成這個任務的例子,但我想知道其他人如何處理這個問題。是否可以在同一個對象內引用對象?

可以說我有這個

var x = function(options){ 
var defaults = { 
    ulist : $('ul#list'), 
    listLen : $('ul#list').children().length 
} 
$.extend(options, defaults); 
// do other stuff 
} 

我試圖做的是使用ulist對象爲基地,然後找到我想我可以做li

數量這樣的:

var x = function(options){ 
var defaults = { 
    ulist : $('ul#list'), 
    listLen : 0 
} 
defaults.listLen = defaults.ulist.children().length; 
$.extend(options, defaults); 
// do other stuff 
} 

或本:

var x = function(options){ 
var defaults = { 
    ulist : $('ul#list') 
}; 
var defaults2 = { 
    listLen : defaults.ulist.children().length 
} 
$.extend(defaults, defaults2); 
$.extend(options, defaults); 
// do other stuff 
} 

上面的代碼示例只是放在一起,只是意味着將想法傳達給您。無論如何,有沒有更好的方法來做到這一點?

+0

@stereofrog:這就是我一直在尋找的,謝謝!你會把它添加爲答案,所以我可以接受它嗎? – Mottie 2010-05-13 19:28:48

+0

如果你打算採用函數的方法來獲得當前的長度,我仍然在默認對象之外添加函數,所以你可以把函數調用運算符'()'放在最後,讓你可以像訪問屬性一樣訪問'defaults.listLen'(就像在jQuery對象上調用.length一樣)。我會更新我的答案,但隨時接受stereofrog的答案,因爲他指出了這種方法。 – user113716 2010-05-13 19:49:40

回答

1

我要說的這個版本,您張貼,但無需初始化listLen0

var x = function(options){ 
var defaults = { 
    ulist : $('ul#list'), 
    listLen : 0 // Remove this line 
} 
defaults.listLen = defaults.ulist.children().length; 
$.extend(options, defaults); 
// do other stuff 
} 

編輯:

你的第二個解決方案將工作過,但沒有必要做兩次調用$.extend()。它可以接受多個對象。

$.extend(options, defaults, defaults2); 

你的第一個解決方案似乎仍然較好。


編輯:

(如指出,你可以使用函數雖然我還是會分配defaults對象的初始化以外的功能,讓您可以添加函數調用運算符。 ()末,並調用它像一個屬性。

var x = function(options){ 
    var defaults = { 
     ulist: $('ul#list') 
    } 

    defaults.listLen = function() {return defaults.ulist.children().length}(); 
} 

現在您可以訪問defaults.listLen像一個屬性並獲得函數調用的結果,有點像調用.length在jQuery對象上。

+0

感謝帕特里克,你是對的,我會在你的原始答案中使用該方法,以儘量減少函數調用的次數。感謝所有的反饋! – Mottie 2010-05-13 21:44:57

相關問題