我开始学习JavaScript,尤其是面向对象编程模式。
我的问题很简单。在setter中,有没有办法为参数和私有类变量保持相同的名称?我已经到处寻找,但找不到任何人提到它,只有使用不同变量名的示例。我对我的代码非常挑剔,不想给它两个不同的名称。
以http://ejohn.org/blog/javascript-getters-and-setters/的示例为例。
您可以在setter中看到参数是val,但属性实际上是value。由于这是javascript,我不能简单地使用this.value=value,因为"this"会使它变成公共的。value=value会同时引用参数(这很奇怪)。真的没有其他方法可以做到这一点吗?如果没有,那么在这种情况下是否有任何“最佳实践”?我猜划线符可能是有效的,但我只是挑剔,所以只想确保没有其他办法。
我的问题很简单。在setter中,有没有办法为参数和私有类变量保持相同的名称?我已经到处寻找,但找不到任何人提到它,只有使用不同变量名的示例。我对我的代码非常挑剔,不想给它两个不同的名称。
以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,我不能简单地使用this.value=value,因为"this"会使它变成公共的。value=value会同时引用参数(这很奇怪)。真的没有其他方法可以做到这一点吗?如果没有,那么在这种情况下是否有任何“最佳实践”?我猜划线符可能是有效的,但我只是挑剔,所以只想确保没有其他办法。
谢谢!
this
作为变量,变量就不会被隐藏。现在我想不出如何为它们使用相同的名称...但是,有一种方法可以根本不提及参数名称:this.setValue = function() { value = arguments[0]; };
。参数对象在所有函数内部定义,保留传递给函数的参数数组和其他一些有趣的东西。 - Imp