2013-03-07 82 views
0

我想知道是否有辦法將對象屬性聲明爲函數,同時也作爲對象聲明。同時使用對象屬性作爲函數和對象

我有一個JavaScript程序,提供了一個簡單的API,將AJAX請求發送到服務器。我的目標是試圖使這個API儘可能簡單和人類可讀。

基本上,我想有可能做到這一點:

var app = new App(); 
app.get.client(123) // Get client ID 123 
app.get.client.list() // Get an array of all clients 
app.login('username', 'password') // Send credentials to log as username/password 
app.login.as('John') // Login using credentials stored in a server-side constant 

我懷疑,因爲我從來不喜歡任何東西,甚至有可能,但我想不出一個更清晰以可讀的方式佈置方法。當然會很好!

回答

2

函數也是一個對象!

app.get.client = function(id) { 
    // Get client by ID 
}; 

app.get.client.list = function() { 
    // List them 
}; 

按照您的預期工作。


就個人而言,雖然,我會發現:

app.clients.byId(123) 
app.clients 
app.login('username', 'password') 
app.loginAs('John') 

更具可讀性。

+0

好神,我感到愚蠢。謝謝! – 2013-03-07 19:25:01

+0

如何使'app.get.client(123)'以及'app.get.client(123).offers(456)'成爲可能? – 2013-03-07 20:55:55

+0

@RémiBreton:'app.get.client'只是返回一個帶'offering'方法的對象。 – Ryan 2013-03-08 00:28:56