Поддержка области JS в вызове конструктора Custom Element

Я экспериментировать с новой выкройкой,
где каждый вновь созданный элемент карты
использует область constructor для хранения (частных) переменных:

псевдокод:

class CardtsCard extends HTMLElement {
    constructor(){
       let private = 666;
       Object.assign(this,{
          getPrivate : () => console.info(private)
       });
    }
    get private(){
       //can not access scope in constructor
       return 42;
    }
}

Так:

 el.getPrivate(); // outputs 666
 el.private;      // outputs 42


I have loads of getters and setters
and sticking data ON my elements with this.whatever=value feels a bit weird.

Я могу расширить его до:

class CardtsCard extends HTMLElement {
    constructor(){
       let private = new Map();
       Object.assign(this,{
          setPrivate : (data,value) => private.set(data,value),
          getPrivate : (data) => private.get(data)
       });
    }
}

Вопрос: Я не эксперт по JS, есть ли недостатки?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
115
1

Ответы 1

Всякий раз, когда вы вызываете конструктор в первом примере, необходимо создать замыкание, содержащее эти «частные» переменные. Для нескольких элементов это не вызывает каких-либо накладных расходов, но для большого количества элементов вы можете столкнуться с накладными расходами по производительности и памяти.

Что касается вашего второго примера: Map поиск не может быть встроен, поиск свойств может, поэтому он более эффективен (что вы заметите только во многих операциях).

И какую выгоду вы получаете от этой установки? Публичный метод getPrivate не является приватным, не так ли? Если вам нужны приватные переменные, пометьте их каким-то образом как приватные и доверьте всем, кто использует код, обращаться с ним надлежащим образом.

На самом деле иногда нет накладных расходов на производительность, но прирост производительности при использовании частной (замыкающей) переменной по сравнению с объектной переменной

Supersharp 26.02.2019 22:18

@supersharp Я хочу увидеть тестовый пример, где это правда.

Jonas Wilms 26.02.2019 22:20

Так сфера есть сфера? Карта внутри (IIFE) такая же, как Карта внутри конструктора?? Любые указатели на «Карта и встроенный» ?? Первый гуглинг дает мне больше технических вещей по Java (я отказался изучать это четверть века назад)

Danny '365CSI' Engelman 26.02.2019 22:20

@danny, в конце концов, constructor — это просто функция (хотя и особенная). Если вы посмотрите «Скрытый класс V8», вы найдете больше оптимизаций, связанных с JS. Или просто кликните сюда

Jonas Wilms 26.02.2019 22:22

Tnx Джонас, это (моя) домашняя работа: richardartoul.github.io/jekyll/update/2015/04/26/…

Danny '365CSI' Engelman 26.02.2019 22:25

@Jonas Wilms есть много примеров на jsperf. В любом случае производительность будет гораздо больше зависеть от техники кодирования автора, JS-движка и профиля процессора, чем от различий между замыканием и классами. И, как вы сказали, в большинстве случаев это не вызывает никаких накладных расходов.

Supersharp 26.02.2019 23:09

Другие вопросы по теме