2015-09-27 105 views
0

我有這樣一個模塊:JavaScript中的繼承模塊可能嗎?

var myModule= {}; 

(function(exports){ 

    init(); 

    exports.doSomething= function(){ 
     return "test"; 
    }; 

    function init(){ 
     initSubscribers(); 
     initListeners(); 

     initForAdmins();//just for the admin 
    } 

    //... a lot of functions that maybe doing things depends on if user is admin or normal user 

})(myModule); 

我有2個網頁:「正常頁的」使用「MyModule的」爲普通用戶和「管理頁面」使用「MyModule的」爲管理員。

模塊的某些部分由普通用戶和管理員用戶使用,但某些部分特定於用戶類型。

我想創建2個模塊(myNormalModule和myAdminModule),它們從通用模塊(具有共享函數)繼承而來。

對我來說,「從模塊繼承」看起來很奇怪。

我generalModule必須是一個對象或它可以是一個模塊?

+0

Javascript中的「模塊」僅僅是遵循某些規則的對象/模式。 – user2864740

+0

好的,但如果5個模塊同時從1個模塊繼承,每個模塊都沒有上下文。他們共享相同的上下文,因此他們訪問相同的數據。它爲什麼在我的腦海裏繼承一個模塊是不可能的。 – riwanab

+0

我同意你的意見,這就是我所做的。但在我的情況下,它就像有一個模塊「商店」購買一些產品(所以模塊內部使用不同的對象)。但是現在,如果您想創建使用「Shop」模塊的新模塊(例如:ShopForWowen和ShopForMen),我想將Shop模塊重新實現爲Shop對象以繼承? – riwanab

回答

2

您創建對象類型,然後從它們繼承。你不從模塊繼承。一個模塊可以在自己的實現中使用另一個模塊,但這不是繼承。因此,首先創建要使用的對象結構(包括繼承,如果適用),然後將其組織到合適的模塊中。而且,將代碼組織到模塊中時,模塊可以定義對象類型,然後可以導出(例如共享)該對象類型,然後其他模塊可以使用它或從中繼承。但是,模塊本身只是一個代碼組織結構,它不是一個繼承結構。因此,我建議你在擔心模塊之前弄清楚你的對象層次結構(包括繼承),一旦設計完成,就可以將它組織到任何適當的模塊中。例如,如果這個特定問題的所有對象類型總是要一起使用,那麼它們可能都放在一個模塊中。

但是,如果這個問題的某些對象類型可能被他們自己使用,那麼將它們分解到它們自己的模塊中可能是有意義的,因爲每個模塊只共享適當的片段。

如果您有要在模塊之間共享的上下文,那麼可以通過幾種不同的方法來實現,具體取決於它是什麼以及它是如何使用的。上下文可以屬於所有其他對象繼承的基礎對象。或者,如果上下文更具全局性,它可以存儲在一個模塊中,然後導出到其他需要訪問它的模塊。