JS ES6 IIFE + Символ и прототип - Добавление к экземпляру? - PullRequest
0 голосов
/ 12 января 2020

Я понимаю, что название моего вопроса может быть странно сформулировано, поэтому я прошу прощения заранее. Чтобы было ясно, я имею в виду следующее:

var IIFE = (function () {
    var a = Symbol("a");
    function IIFE() {
        this["a"] = null;
    }
    IIFE.prototype = {
        get a() { return this[a]; },
        set a(n) { this[a] = n; }
    }
    return IIFE;
}());
var iife = new IIFE;

Я хочу динамически добавить 'b' & 'c', используя массив:

var arrProps = ['b','c'];

к экземпляру IIFE. Мне все равно, как это делается, так что до тех пор, пока к значениям, указанным в arrProps, можно получить доступ и присвоить их так же, как и в случае с «а» внутри экземпляра, вне экземпляра и внутри прототипа get / set. Примером использования 'b' может быть:

  • внутри экземпляра: this["b"] = value;
  • вне экземпляра: iife.b = value;
  • прототип set ​​/ get : this[b] = value;

Что касается внутренних / внутренних значений get / set go, то нет ничего более, чем просто получение значения и значения настройки.

Любая помощь будет очень полезной оценили.

1 Ответ

1 голос
/ 12 января 2020

Вместо использования Symbol, пусть функция возвращает прокси, а вы можете использовать его ловушки get и set для проверки доступа / назначения произвольным свойствам:

const proxy = new Proxy({}, {
  get(obj, prop) {
    console.log('getting');
    return obj[prop];
  },
  set(obj, prop, newVal) {
    console.log('setting');
    return obj[prop] = newVal;
  },
});

proxy.a = 'aVal';
console.log(proxy.a);
proxy.b= 'bVal';
proxy.c = 'cVal';
proxy.a = 'anotherAVal';
...