为了账号安全,请及时绑定邮箱和手机立即绑定

可以在 JS 中同时充当对象和函数吗?

可以在 JS 中同时充当对象和函数吗?

慕妹3242003 2021-11-12 18:23:23
我正在尝试为我的 api 创建一个编程接口,我有以下路线'api/location/:locationId/users' get, post'api/location/:locationId/users/:userId' get, post, put我想像这样使用它var myApi = new API('baseUrl');myApi.api.location(locationId).users.get()myApi.api.location(locationId).users.post(data)myApi.api.location(locationId).users(userID).get()myApi.api.location(locationId).users(userID).post(data)myApi.api.location(locationId).users(userID).put(data)所以我开始写这门课并意识到这不是直截了当的class API{  constructor(baseUrl) {    this.axios = axios.create({ baseURL });;  }  this.api = {     location: (locationId) => {        users: ...(stuck)     }  }}我知道有不同的方法可以做到这一点,但我想知道是否“可能”在 javascript 中同时充当函数和对象IE。var a = ..?..a(blah) // returns an outputa.get(blah) // returns an output
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

这当然是可能的:


var myObj = {

  someFunc: () => "foo"

}


myObj.someFunc.bar = "baz";


console.log(myObj.someFunc());

console.log(myObj.someFunc.bar);


函数就像 JavaScript 中的几乎所有其他东西一样是对象。这意味着您可以向它们添加属性。


查看完整回答
反对 回复 2021-11-12
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

知道了。

class API {

  constructor(baseUrl) {

    this.baseUrl = baseUrl;

    this.api = {

       location: (locationId) => ({

          users: (() => {

            var a = (userId) => ({

              get: () => `${this.baseUrl}/api/location/${locationId}/users/${userId}`

            })

            a.get = () => `${this.baseUrl}/api/location/${locationId}/users`;

            return a

          })()

       })

    }

  }

}

var myApi = new API('baseUrl');

myApi.api.location('locationId').users.get()

// "baseUrl/api/location/locationId/users"

myApi.api.location('locationId').users('userId').get()

// "baseUrl/api/location/locationId/users/userId"


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信