JS ES6 IIFE +符号和原型-要添加到实例吗?

时间:2020-01-12 06:19:51

标签: javascript prototype instance symbols iife

我意识到问题的标题可能措辞怪异,因此我在前面表示歉意。 需要明确的是,我指的是这一点:

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 /中使用“ a”相同组。使用'b'的示例为:

  • 在实例内部:this["b"] = value;
  • 实例外部:iife.b = value;
  • 设置/获取原型:this[b] = value;

就获取/设置内部而言,只不过是获取值和设置值而已。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

让函数代替代理,而不使用符号,您可以使用其getset陷阱来检查对任意属性的访问/分配:

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