Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2018, 10:27
Интересующийся
Отправить личное сообщение для Ppezrk Посмотреть профиль Найти все сообщения от Ppezrk
 
Регистрация: 26.10.2018
Сообщений: 12

Не работает 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
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2018, 10:34
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Почитайте и сравните со своим кодом:
https://learn.javascript.ru/descriptors-getters-setters
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2018, 10:36
Интересующийся
Отправить личное сообщение для Ppezrk Посмотреть профиль Найти все сообщения от Ppezrk
 
Регистрация: 26.10.2018
Сообщений: 12

Значит, нельзя обойтись без Object.defineProperty?
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2018, 10:40
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Ppezrk, для "writable", скорее всего нельзя. Мне, по крайней мере, без Object.defineProperty способ неизвестен.
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2018, 10:59
Интересующийся
Отправить личное сообщение для Ppezrk Посмотреть профиль Найти все сообщения от Ppezrk
 
Регистрация: 26.10.2018
Сообщений: 12

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

}());

Так тоже не работает.
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2018, 11:08
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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

Последний раз редактировалось Nexus, 02.11.2018 в 11:13.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11