JS: 根据父级属性构建对象的方法
P粉883223328
P粉883223328 2024-04-04 21:08:50
0
1
1540

我正在尝试创建一个包含所有URL的JS对象。

我想通过data()部分来实现这一目标:

export default defineComponent({
  name: 'MyPage',
  data() {
    backendUrls: {...}
  }
})

以更简单的方式来看,它会像这样:

backendUrls: {
  baseUrl: "http://localhost:8080",
  baseUrlWithPrefix: function() { return this.baseUrl + "/ver1"; }
  userAdd: function() { return this.baseUrlWithPrefix() + "/user/add"; }
}

我可以使用this关键字,因为它指向与给定属性所在的对象相同的对象。

但是我想再分割一下,并在对象中创建对象:

backendUrls: {
  baseUrl: "http://localhost:8080",
  generalUrls: {
    baseUrlWithPrefix: ...
  },
  socketUrls: {
    messageUrls: {
      userAdd: ...
    }
  }
}

在这里,如果我尝试generalUrls: { baseUrlWithPrefix: function() { return this.baseUrl "/ver1"; }},它不会起作用,因为它找不到baseUrl,因为this关键字指向generalUrls对象,而不是backendUrls对象,baseUrl存在于后者中。

我需要像这样的东西:

backendUrls: {
  baseUrl: "http://localhost:8080",
  generalUrls: {
    baseUrlWithPrefix: function() { return {goBackToParentObject}.this.baseUrl + "/ver1"; }
  },
  socketUrls: {
    messageUrls: {
      userAdd: function() { return {goBackToParentObject}.this.generalUrls.baseUrlWithPrefix() + "/user/add"; }
    }
  }
}

P粉883223328
P粉883223328

全部回复(1)
P粉432930081

只需按照以下方式更改调用函数的方式

const backendUrls = {
  baseUrl: "http://localhost:8080",
  generalUrls: {
    baseUrlWithPrefix: function() { return this.baseUrl + "/ver1"; }
  },
}

const example = backendUrls.generalUrls.baseUrlWithPrefix.bind(backendUrls);

example();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板