javascript中的getter和setter

mar*_*igo 5 javascript oop getter-setter

我开始使用javascript,特别是使用OOP模式.

我的问题很简单.在setter中,有没有办法为参数和私有类变量保留相同的名称?我到处寻找,但找不到任何人提到它,只是具有不同var名称的例子.我对我的代码非常挑剔,我不得不给它两个不同的名字.

以http://ejohn.org/blog/javascript-getters-and-setters/为例

function Field(val){
    this.value = val;
}
Field.prototype = {
    get value(){
        return this._value;
    },
    set value(val){
        this._value = val;
    }
};
Run Code Online (Sandbox Code Playgroud)

你可以在setter中看到参数是val,但属性实际上是value.因为它是javascript我不能简单地这样做.value = value因为"this"会使它公开.value = value将引用参数(并且会非常奇怪).真的没办法做到这一点吗?如果没有,这种情况有没有"最佳做法"?我想下划线可能是有效的,但我只是挑剔所以只是想确保没有别的办法.

谢谢!

Imp*_*Imp 5

您可以使用闭包来隐藏变量.

function MyClass {
  var value;

  this.getValue = function() {
    return value;
  }

  this.setValue = function(val) {
    value = val;
  }

}
Run Code Online (Sandbox Code Playgroud)

构造函数MyClass完成后,该value字段是不可能的,因为它仅限于此构造函数(函数).所以我们可以说这value是一个私人领域.然而,所述方法getValue()和setValue()从所构造的对象公开访问和他们保持参照的可变范围MyClass,因此它们仍然可以操纵value.