使用自调用函数javascript定义对象文字中的getter/setter

Jim*_*nes 3 javascript getter-setter

在定义对象文字时,可以使用自调用函数,以便函数可以访问私有变量,

obj={
    value:(function(){
        var private;
        return function(){
            return true;
        }
    }())
};
Run Code Online (Sandbox Code Playgroud)

但是可以用对象文字中的getter/setter做同样的事情吗?

obj={
    get value(){
        return value;
    },
    set value(v) {
        value=v;
    }
};
Run Code Online (Sandbox Code Playgroud)

Koo*_*Inc 8

并不是的.您也可以创建一个IIF obj:

obj = function () {
    var privatething = 'hithere';
    return {
        get value() {
            return privatething;
        },
        set value(v) {
            privatething = v;
        }
    };
}();
obj.value; //=> 'hithere';
obj.value = 'good morning to you too';
obj.value; //=> 'good morning to you too'
Run Code Online (Sandbox Code Playgroud)


Tim*_*zza 5

按照 ES6 及更高版本的风格,也可以在签名中设置默认值。

const _ = function(_x = 'leafy greens', _y = 'chicken', _z = 'noodle soup') {

  // console.log(_x)

  return {
    _x,
    _y,
    _z,
    get x() { return this._x },
    set x(value) { this._x = value }
  }

}()

console.log(_.x)
_.x = 'beef & pork'
console.log(_.x)
Run Code Online (Sandbox Code Playgroud)