我正在尝试创建一个包含所有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粉4329300812024-04-05 13:13:09
只需按照以下方式更改调用函数的方式
const backendUrls = { baseUrl: "http://localhost:8080", generalUrls: { baseUrlWithPrefix: function() { return this.baseUrl + "/ver1"; } }, } const example = backendUrls.generalUrls.baseUrlWithPrefix.bind(backendUrls); example();