javascript - javascript 中的 getter 和 setter

原文 标签 javascript oop getter-setter

我从 javascript 开始,特别是从 OOP 模式开始。

我的问题很简单。在 setter 中,有没有办法让参数和私有(private)类变量保持相同的名称?我到处找,但找不到任何人提到它,只是具有不同 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 将同时引用参数(并且会很奇怪)。真的没有办法做到这一点吗?如果没有,是否有针对这种情况的“最佳实践”?我想下划线可能是有效的,但我只是挑剔,所以只想确保没有其他方法。

谢谢!

最佳答案

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

function MyClass {
  var value;

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

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

}

构造函数后 MyClass完成,value字段是不可访问的,因为它只限于此构造函数(函数)。所以我们可以说value是一个私有(private)字段。但是,方法getValue()setValue()可以从构造的对象公开访问,并且它们保持对 MyClass 的变量范围的引用。 ,因此他们仍然可以操纵 value .

关于javascript - javascript 中的 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359529/

相关文章:

java - 避免通过jsonschema2pojo生成setter方法

javascript - 用户从下拉列表中选择一个选项后,如何从嵌套对象访问数据然后传递给href属性

c++ - 错误:没有匹配的函数来调用‘ope::ope()

java - 当有 getter 时,Hibernate 是否总是需要一个 setter?

c# - 了解一些 C# 代码

Python:OOP 开销?

python - 我应该使用属性还是 getter 和 setter?

javascript - 为什么我的滑块不响应?

javascript - 防止力有向图中的节点重叠

javascript - 如何根据单选按钮显示不同的跨度?