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

Javascript JS ES6 IIFE+符号和原型-添加到实例?,javascript,prototype,instance,symbols,iife,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; } } ret

我意识到我的问题的标题可能措辞怪异,所以我先道歉。 说清楚一点,我指的是:

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

一个生命的实例。我不在乎它是如何完成的,所以只要arrProps中指定的值可以访问和分配,就像在实例内部、实例外部和原型get/set中使用“a”一样。使用“b”的示例如下:

实例内部:此[b]=值; 实例外部:iife.b=值; 原型设置/获取:此[b]=值; 就get/set内部而言,没有什么比获取值和设置值更重要的了


任何帮助都将不胜感激

不使用符号,而是让函数返回代理,您可以使用其get和set陷阱检查对任意属性的访问/分配:

const proxy=新代理{}{ getobj,道具{ console.log'get'; 返回对象[prop]; }, setobj,prop,newVal{ 控制台。日志“设置”; 返回对象[prop]=newVal; }, }; proxy.a='aVal'; console.logproxy.a; proxy.b='bVal'; proxy.c='cVal';
proxy.a='anotherAVal';听起来您也希望设置的值不直接对外可见,对吗?你想强制属性访问通过getter吗?也许对象是更好的选择,因为iife.b=value;第一次/*下一次*/iffe.value=newValue?在我所做的许多尝试中,都导致b的get/set显示为iLife的子对象,其中a的set/get显示为iLife的子对象。这导致b的set/get调用自身,而不是设置或获取值。你能进一步说明你的答案吗,显示它应用于IIFE,以及它在遍历数组时如何工作?您根本不需要IIFE,因为您可以简单地声明一个代理。新代理中的所有内容本质上都是私有的-如果不通过代理上的setter或getter,则无法从外部访问其内容。若要为代理分配新属性,请使用与代码段中的代码相同的技术-例如Proxy.a=将调用setter trap,并引用proxy.a作为表达式将调用getter陷阱。因此,您只需要获取数组项并执行相同的操作。