我从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,但属性实际上是value。因为它是javascript我不能简单地这样做.value = value因为“this”会使它公开。 value = value将引用参数(并且会非常奇怪)。真的没办法做到这一点吗?如果没有,这种情况有没有“最佳做法”?我想下划线可能是有效的,但我只是挑剔所以只是想确保没有别的办法。
谢谢!
答案 0 :(得分:5)
您可以使用闭包隐藏变量。
function MyClass {
var value;
this.getValue = function() {
return value;
}
this.setValue = function(val) {
value = val;
}
}
构造函数MyClass
完成后,value
字段是不可能的,因为它只限于此构造函数(函数)。所以我们可以说value
是一个私人领域。但是,方法getValue()
和setValue()
可以从构造的对象公开访问,并且它们会引用MyClass
的变量范围,因此它们仍然可以操作value
。
答案 1 :(得分: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());
这是关于closures in JS的好教程。