Javascript 通过definerProperty创建无用变量定义新的getter/setter属性

Javascript 通过definerProperty创建无用变量定义新的getter/setter属性,javascript,Javascript,当我想用defineProperty定义新属性时遇到了一些问题,因为同时创建了一些无用的变量,这里是“\m”属性。您可以将值存储在闭包中: var a = {} Object.defineProperty(a, 'm', { get () { return this._m }, set (val) { this._m = val console.log('val', val) } }) . 请注意,我认为这会使代

当我想用defineProperty定义新属性时遇到了一些问题,因为同时创建了一些无用的变量,这里是“\m”属性。

您可以将值存储在闭包中:

var a = {}
Object.defineProperty(a, 'm', {
    get () {
        return this._m
    },
    set (val) {
        this._m = val
        console.log('val', val)
    }
}) . 

请注意,我认为这会使代码变得不必要的复杂和难以调试,因此它并不真正值得。

好吧,是您创建的,对吗?您可以创建闭包,而不是将值存储在对象上:

var a={}
Object.defineProperty(a,'m',(()=>{
让价值;
返回{
可枚举:true,//使“m”本身可枚举。
得到(){
返回值;
},
设置(val){
值=val
console.log('val',val)
}
};
})());
a、 m=12;

控制台日志(a)属性不是变量?但是不,它不是无用的,它是用来存储值的。你遇到了什么问题?实际问题是什么?它更改了原始对象,
中的
现在包含了“\m”属性,然后使用局部变量而不是额外的属性。或使
\u m
不可枚举。
(function () {
    let m;

    Object.defineProperty(a, 'm', {
        get () {
            return m;
        },
        set (val) {
            m = val;
            console.log('val', val);
        }
    });
})();