我从 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/