如何在原型上定义的函数访问私有变量?

时间:2013-06-08 14:03:25

标签: javascript prototype

原型方法如何在构造函数中访问私有变量(通过闭包访问的值)而不暴露公共getter和setter。

function User() {

     var value = 1;

     this.increment = function () {
         value++;
     };

     this.set = function (val) {
         value=val; 
    };
    this.get = function () {
         return value;
    };     
}

User.protptype.add = function (value) {
    this.set(this.get()+value);
}

如何摆脱get()和set()并且仍然只有一个add()副本?

目的是确保add()函数只有一个实例,而不是为每个对象创建一个实例,而该对象能够访问私有变量,在本例中是构造函数中的value变量。

1 个答案:

答案 0 :(得分:2)

因为private的概念从未成为JavaScript的一部分,因此没有办法自然地这样做。你只是在“模仿”JS中的私有。

唯一可以做到的方法是将方法声明放在构造函数的作用域中,以便它可以看到“私有”成员。但这意味着在每个实例上复制函数,并且函数存在于实例上,而不是原型上。

function User(){

  var value = 1;

  this.add = function(newValue){
    value += newValue;
  };

}