Не работает get/set
"use strict"; (function () { let element = { name: { writable: false }, dom: { writable: false , get: () => { return undefined; } }, get: () => { return this.dom; }, set: (dom) => { this.dom = dom; this.name = this.dom.nodeName.toLowerCase(); } }; element = document.body; alert(element.name); }()); Alert выдает undefined :( |
Почитайте и сравните со своим кодом:
https://learn.javascript.ru/descriptors-getters-setters |
Значит, нельзя обойтись без Object.defineProperty?
|
Ppezrk, для "writable", скорее всего нельзя. Мне, по крайней мере, без Object.defineProperty способ неизвестен.
|
'use strict'; (function () { let element = { name: '', dom: '' }; Object.defineProperties(element, { get: () => { return this.dom; }, set: (dom) => { this.dom = dom; this.name = this.dom.nodeName.toLowerCase(); } }); element = document.body; alert(element.name); }()); Так тоже не работает. |
Ppezrk, вы статью, ссылку на которую я давал читали дальше первого упоминания "Object.defineProperty"?
Что вы пытаетесь сделать - вообще загадка. 4-я строка: объявляем объект; 5-8: объявляем СВОЙСТВА объекта element и, внезапно, вместо объекта дескриптора передаем функцию; 10: удаляем к чертям все потуги до этой самой строки, записывая в переменную ссылку на "body"; 11: пытаемся в alert вывести атрибут name body страницы. class SomethingAdapter { constructor(node) { this.node = node; } get() { return this.node; } get name() { return this.node.nodeName.toLowerCase(); } } var elem=new SomethingAdapter(document.body); alert(elem.name); |
Часовой пояс GMT +3, время: 11:33. |