JavaScript中的getter和setter(语法是否正确?)

JavaScript中的getter和setter(语法是否正确?),javascript,oop,Javascript,Oop,我不熟悉JavaScript,但一般来说不熟悉OOP 这是在JavaScript中创建getter和setter的有效方法吗 “类” 盖特 Person.prototype.getAge = function(){ return this.age; }; 和二传手 Person.prototype.setAge = function(arg){ this.age = arg; }; 它似乎工作正常,但我不知道惯例,我到处都有不同的描述,但我的解决方案有效吗?您可能想要对象。d

我不熟悉JavaScript,但一般来说不熟悉OOP

这是在JavaScript中创建getter和setter的有效方法吗

“类”

盖特

Person.prototype.getAge = function(){
    return this.age;
};
和二传手

Person.prototype.setAge = function(arg){
    this.age = arg;
};

它似乎工作正常,但我不知道惯例,我到处都有不同的描述,但我的解决方案有效吗?

您可能想要
对象。defineProperty
(),下面是一个使用中的示例:

Object.defineProperty(Person.prototype, 'age', {
  get: function(){
    return this.__age__;
  },
  set: function(value){
    this.__age__ = value;
  }
});
如果需要,也可以在其他地方保存变量。以下内容将作为单个值,在
Person
的所有实例中设置和访问:

var age;

Object.defineProperty(Person.prototype, 'age', {
  get: function(){
    return age;
  },
  set: function(value){
    age = value;
  }
});
如果要为创建的Person对象的每个实例使用
age
变量,则需要在构造函数中添加变量声明:

function Person(){
  var age; 
  // ditto from the second example
}

请参阅此链接,以避免与类似术语混淆:
此。uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuumember@zerkms双底栏是属性的默认私有标志(甚至浏览器也使用了该约定)那么,我们的解决方案之间的实际区别是什么?@timpal0l:区别是语义上的。您的解决方案更明显,给定的更神奇。@csuwldcat:code>的代码约定有参考吗?我看到
\u foo
foo
的使用频率更高。
function Person(){
  var age; 
  // ditto from the second example
}