Показать сообщение отдельно
  #299 (permalink)  
Старый 01.10.2015, 13:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от FINoM
я просто не могу упустить возможности порекомендовать тебе заюзать Матрешку
Зачем она здесь? В моем примере символ для:
1. приватности
2. скорости набора кода
3. лучшего сжатия кода

Сообщение от trikadin
так ты тут хочешь сделать enumerable свойство, которое объявлено в прототипе объекта.
нет другого способа в es6 объявлять геттеры и сеттеры в классах

devote, спасибо.
Сообщение от devote
var self = this;
не надо (на первый взгляд), т.к. arrow function

Я для наглядности для себя сделал так
'use strict';


const __PROP = Symbol();


class Foo {
  constructor() {
    this.__setEnumerable('prop', true);
    this.prop = 1;
  }
  get prop() {
    return this[__PROP];
  }
  set prop(value) {
    this[__PROP] = value;
  }
  __setEnumerable(prop, state) {
    let prototype = this.constructor.prototype;
    let descriptor = Object.getOwnPropertyDescriptor(prototype, prop);
    descriptor.enumerable = state;
    Object.defineProperty(this, prop, descriptor);
  }
}


let bar = new Foo();

console.log(bar.prop); // 1
console.log(Object.keys(bar)); // ["prop"]


Жалко, что так нельзя:
class Foo {
  constructor() {
    this.prop.__enumerable = true;
    this.prop = 1;
  }
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 01.10.2015 в 13:30.
Ответить с цитированием