Maison  >  Questions et réponses  >  le corps du texte

JS : Comment créer un objet basé sur les propriétés parentes

J'essaie de créer un objet JS qui contient toutes les URL.

Je souhaite y parvenir grâce à la partie data() :

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

En regardant les choses d'une manière plus simple, cela ressemblerait à ceci :

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

Je peux utiliser le mot-clé this car il pointe vers le même objet que la propriété donnée.

Mais je veux le diviser davantage et créer des objets dans des objets :

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

Ici, si j'essaye generalUrls : { baseUrlWithPrefix: function() { return this.baseUrl + "/ver1"; }}, cela ne fonctionnera pas car il ne trouve pas baseUrl , car le mot-clé generalUrls: { baseUrlWithPrefix: function() { return this.baseUrl + "/ver1"; }},它不会起作用,因为它找不到baseUrl,因为this关键字指向generalUrls对象,而不是backendUrls对象,baseUrl pointe vers l'objet generalUrls, et non vers l'objet backendUrls, dans lequel baseUrl existe.

J'ai besoin de quelque chose comme ceci :

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粉883223328P粉883223328178 Il y a quelques jours1426

répondre à tous(1)je répondrai

  • P粉432930081

    P粉4329300812024-04-05 13:13:09

    Changez simplement la façon dont vous appelez la fonction comme suit

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

    répondre
    0
  • Annulerrépondre