Я пытаюсь уменьшить количество дублирующегося кода, который пишу в объектах 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")
};