Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Не работает get/set (https://javascript.ru/forum/css-html/75742-ne-rabotaet-get-set.html)

Ppezrk 02.11.2018 10:27

Не работает 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 :(

Nexus 02.11.2018 10:34

Почитайте и сравните со своим кодом:
https://learn.javascript.ru/descriptors-getters-setters

Ppezrk 02.11.2018 10:36

Значит, нельзя обойтись без Object.defineProperty?

Nexus 02.11.2018 10:40

Ppezrk, для "writable", скорее всего нельзя. Мне, по крайней мере, без Object.defineProperty способ неизвестен.

Ppezrk 02.11.2018 10:59

'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);

}());

Так тоже не работает.

Nexus 02.11.2018 11:08

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.