Не работает 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, время: 22:56. |