2012-04-02 25 views
1

我正在對項目中的幾個腳本進行命名空間處理,並且在搜索了一段時間後,我不確定是否按照最佳做法來命名空間屬性。使用jQuery命名空間屬性的最佳模式

這裏是我做的一個樣本:

var myNamespace = myNamespace || {}; 

    $.extend(true, myNamespace, { 
     subNamespace: { 

     } 
    }); 

    $.extend(true, myNamespace.subNamespace, { 
     data: {} 
    }); 

    $(document).ready(function() { 
     myNamespace.subNamespace.data = "Value as string"; 

     alert(myNamespace.subNamespace.data); 
    }); 

正如你所看到的,在這種情況下,屬性名稱是「數據」。

這是用javascript,jquery實現名稱空間屬性的好方法嗎?

謝謝

回答

1

是否有您使用jQuery.extend添加任何深度的具體原因是什麼?乍一看,你可能也使用對象的單身定義命名空間:

var myNamespace = { 
    subNamespace: { 
     data: "Value as string" 
    } 
}; 
+0

我使用jQuery.extend是因爲我想能夠在不同的步驟中構造子名稱空間的屬性和功能。有了你的解決方案,你將不得不定義所有的subNamespace可以包含在同一個地方。使用我的解決方案,如果我在一個地方添加了一些函數和屬性,並在另一個地方添加了相同的名稱空間,我將不會覆蓋前面步驟中的子名稱空間定義。有可能我錯了?! – Samuel 2012-04-02 21:21:38

+0

你不需要'jQuery.extend'來做到這一點:'var top = {}; top.sub = {}; top.sub.data ='whatever';' – David 2012-04-03 09:09:13

1

Addy Osmani是Javascript的設計的最佳實踐與幾個免費的電子書一個偉大的作家,並且對像命名空間科目無數的博客文章。

他曾經是美國在線的JS工程師,但最近宣佈他將搬到谷歌。

下面是他的一本書中專門提供命名空間章節的鏈接,但我建議你也看看他的主頁。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailnamespacing

+0

感謝您提供這些信息。當我在google中輸入'Javascript namespacing'時,結果中的第一項始終是你前進的鏈接。這是我的參考,我仍然想要其他關於subjet的建議。 – Samuel 2012-04-03 00:44:40

0

如果你必須使用extend(),因爲NameSpace對象已存在,然後用深擴展到最大:

你有適當如何命名你的對象
$.extend(true, NameSpace, { 
    subNameSpace : { 
     data : {} 
    } 
}); 

不幸的是,問題完全依賴於該項目。數據是其他開發人員不應該觸摸的東西嗎?如果不是,那麼一個約定是在名稱的開頭使用下劃線。你會有多少subNameSpace,並且data將依賴於它們中的一個或全部。

如果您要從jQuery對象命名空間,那麼您需要確定該方法是自己運行還是運行在一組選定對象上。如果前者然後只延伸jQuery,並且如果後者則延伸jQuery.fn