Могу ли я использовать объект в качестве шаблона для других объектов? - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь уменьшить количество дублирующегося кода, который пишу в объектах JS. У меня есть методы, которые я хочу использовать, когда почти ничего не меняется, кроме цели, и я хотел бы извлечь это и каким-то образом получить цель через имя свойства объектов. Надеюсь, приведенный мной пример имеет смысл.

myObject = {
  d: {
    get: function(list, id) {
      // do stuff
    },
    prop1: {
      data: [],
      list: myObject.config.lists.prop1.guid,
      get: function(a,b) {
        myObject.d.get(a,b)
      }
    },

    // I want to write this once and use the object key ("prop2") as an argument
    prop2: {
      data: [],
      list: myObject.config.lists.prop2.guid,
      get: function(a,b) {
        myObject.d.get(a,b)
      }
    }
  }
};

Попробовал что-то вроде этого, но получил ошибку "Невозможно прочитать реквизит" undefined "

myObject = {
  d: {
    get: function(list, id) {
      // do stuff
    }
  },

  // Use this to duplicate shared funtions for similar
  spec: function(target) {
    return {
      data: [],
      list: myObject.config.lists[target].guid,

      get: function() {
        myObject.d.get(a, b);
      },
      update: "",
      delete: ""
    };
  },

  // some how return `myObject.spec.get()`, allowing me to use myObject.d.prop1.get()
  prop1: myObject.spec.apply(this, "prop1"),
  prop2: myObject.spec.apply(this, "prop2")
};

1 Ответ

0 голосов
/ 27 августа 2018

Пока что единственный способ заставить его работать - это установить prop1 и prop2 вне начального замедления, как это, и явно объявить target, как @Bergi предложил:

var myObject = myObject || {};
myObject = {
  d: {
    get: function(list, id) {
      // do stuff
    }
  },

  // Use this to duplicate shared funtions for similar
  spec: function(target) {
    return {
      data: [],
      list: target,

      get: function() {
        myObject.d.get(a, b);
      },
      update: "",
      delete: ""
    };
  }

};

// some how return `myObject.spec.get()`, allowing me to use myObject.d.prop1.get()
myObject.prop1 = myObject.spec("prop1");
myObject.prop2 = myObject.spec("prop2");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...