Сделать функцию методом объекта
Можно ли в моём примере функцию parseContent сделать методом объекта content?
Код function parseContent(id) { let txt = []; document.querySelectorAll(id + ' div').forEach((div, i) => txt[i] = div.textContent); return txt } const content = { header: parseContent('header'), main: parseContent('main'), footer: parseContent('footer') } Чтобы получить примерно такую запись: const content = { header: this.parseContent('header'), main: this.parseContent('main'), footer: this.parseContent('footer'), parseContent: function(id) { let txt = []; document.querySelectorAll(id + ' div').forEach((div, i) => txt[i] = div.textContent); return txt } } |
Чем ваш вариант вас не устраивает?
|
<header><div>Header Text Content</div></header> <script> const content = { parseContent: function(id) { let txt = []; document.querySelectorAll(id + ' div').forEach((div, i) => txt[i] = div.textContent); return txt; }, header: function () { return this.parseContent('header') }, main: function () { return this.parseContent('main') }, footer: function () { return this.parseContent('footer') } } alert(content.header()); </script> |
Цитата:
Теперь вроде переосмысливаю что мой вопрос идёт против логики. Методы работают со свойствами объекта, а у меня никакие свойства в функции не нужны. Поэтому нет смысла впихивать такую функцию в объект под видом метода. |
Dilettante_Pro, спасибо за пример с решением. Поучительный пример - получился объект из методов.
Если я правильно помню, JSON.stringify(content) отрежит все методы и получится пусто, а мне данные нужны. Так что изначально мой вопрос глупый. Теперь буду знать. |
MC-XOBAHCK, я не обратил внимание на свойства вашего объекта, извините.
const content = { header: this.parseContent('header'), main: this.parseContent('main'), footer: this.parseContent('footer'), parseContent: function(id) { let txt = []; document.querySelectorAll(id + ' div').forEach((div, i) => txt[i] = div.textContent); return txt } } Так объявлять значения для свойств нельзя, ошибка будет. Вы при объявлении значений свойств пытаетесь обратиться через контекст к еще не созданному объекту "content", поэтому this будет указывать не на объект "content", а на "родительскую" ОВ. Разберите пример Dilettante_Pro, он исправил эту ошибку заменой свойств на методы. Еще можно было бы сделать так, но это какое-то извращение: const content = { parseContent: function(id) { let txt = []; document.querySelectorAll(id + ' div').forEach((div, i) => txt[i] = div.textContent); return txt } }; ['header', 'main', 'footer'].forEach(key => content[key] = content.parseContent(key)); |
Часовой пояс GMT +3, время: 05:07. |