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/

相关文章:

javascript - 如何正确构建 KnockoutJS 应用程序

php - 创建一个 oop php 博客

Java:如何使私有(private)字段Map在类中不可变?

java - IntelliJ getter/setter 格式(单行与多行)

properties - 在 Kotlin 中创建接口(interface)时,属性是否具有 get/set 是否重要?

javascript - KnockOutJS 在子订阅上触发父函数

javascript - 在 Javascript 中播种随机数生成器

java - 从父类重写方法

oop - 现代 Fortran 中的面向对象编程,包括函数指针的成员

javascript - jquery 不支持无限滚动