поддержание области JS в вызове конструктора Custom Element - PullRequest
0 голосов
/ 27 февраля 2019

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

псевдокод:

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

Итак:

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


У меня есть множество геттеров и сеттеров
и я прикрепляю данные на мои элементы с помощью this.whatever=valueкажется немного странным.

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

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, есть ли недостатки?

1 Ответ

0 голосов
/ 27 февраля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...