同时使用对象属性作为函数和对象

问题描述:

我想知道是否有办法将对象属性声明为函数,同时也作为对象声明。同时使用对象属性作为函数和对象

我有一个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 

我怀疑,因为我从来不喜欢任何东西,甚至有可能,但我想不出一个更清晰以可读的方式布置方法。当然会很好!

函数也是一个对象!

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