5

我从 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;
    }
};

您可以在 setter 中看到参数是 val 但属性实际上是值。由于它是 javascript,我不能简单地执行 this.value=value,因为“this”会将其公开。value=value 将同时引用参数(并且会很奇怪)。真的没有办法做到这一点吗?如果没有,这种情况是否有任何“最佳实践”?我想下划线可能是有效的,但我只是很挑剔,所以只想确保没有其他方法。

谢谢!

4

2 回答 2

5

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

function MyClass {
  var value;

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

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

}

构造函数MyClass完成后,该value字段将无法访问,因为它的范围仅适用于此构造函数(函数)。所以我们可以说这value是一个私有领域。但是,方法getValue()setValue()可以从构造对象公开访问,并且它们保持对 的变量范围的引用MyClass,因此它们仍然可以操作value

于 2012-04-28T00:56:37.197 回答
1

使用闭包:

(function(exports){

    exports.field = {};
    var _value = '123';

    exports.field.get = function(){
        return _value;
    }

    exports.field.set = function(val){
        _value = val;
    }

})(window);

console.log(field.get());

这是一个关于JS 闭包的好教程。

于 2012-04-28T00:52:39.880 回答