2015-11-20 31 views
0

我正在構建一個相當大的node.js客戶端庫,我希望能夠'命名空間'的一部分,以保持它更有組織。例如:命名空間一個JavaScript類,但保留相同的'這'

var client = new Client(config); 

client.activities.get(activityId, function(activity) { 
    ... 
}); 

... 

client.user.get(userId, function(user) { 
    ... 
}); 

我正在試圖做的模塊中是這樣的:

function Client(config) { 
    this.config = config; 
} 

Client.prototype.activities = require('./activities'); 
Client.prototype.user = require('./user'); 

module.exports = Client; 

但是當「GET」是所謂的活動「子模塊」中,「本」是當然,對於模塊而言,而不是外部客戶端功能。基本上,這兩個子模塊都需要訪問外部配置信息(本例中爲'config')。在node.js中做這件事的最佳做法是什麼?

+0

我用來設置一個變量以外的方法將值設置爲此。我不知道是否有更好的做法,但也許可以解決你的問題 – Pablo

+0

你需要一個包裝方法,在你想要的''Client.prototype.activities_method = function(foo){return this.activities [foo] .apply(this,Array.prototype.slice.call(arguments,1));};} –

回答

1

我認爲您的計劃存在建模問題,new X()X.prototype的每個屬性引用複製到新項目;例如,X.myFunctionX.prototype.myFunction完全相同;但是不會創建myFunction的新的副本

聽起來好像如果activities是一個客戶端(同樣的方式StreetAddress可能)的一部分,你真正想要activities是一個類,而不是一個模塊,併爲Client創建它當實例它的構建。這並不是prototype有用的東西。如果我錯了,也許你可以展示一個基本操作activities的例子。

+0

我不是專業人士或任何人,但我相信類和實例的使用是有點關閉時談論JavaScript它是基於原型的,而不是面向對象的語言。 – Arg0n

+0

@ Arg0n這不是像Java這樣的語言使用它們的方式的轉向機制,但JavaScript不具有*對象。如果你有一個框架來構造它們(例如Dojo,TypeScript)或者ES6,它甚至會有類。 – Katana314

+0

我想我同意你 - 這些應該只是子對象,我應該在初始化時將配置傳遞給它們中的每一個。 – outside2344

相關問題