javascript原型和私有变量

时间:2016-09-10 04:37:01

标签: javascript prototypal-inheritance

  1. 如何让我的min函数正常工作。我得到的banque未定义?
  2. 感谢。

    1. 列表项
    2. 列表项
    3. 列表项
    4. function Personne(nom){
        this.nom = nom;
        var banque = 1500;
        this.add = function(number){
          banque = banque + number
        }
        this.getCpte = function() {
          return banque
        }
      }
      
      Personne.prototype.min = function(number){
        banque = banque - number
      }
      
      var me = new Personne('albert')
      
      
      
      console.log(me)
      me.add(500)
      me.min(500) // got banque is undefined
      console.log(me.getCpte())

2 个答案:

答案 0 :(得分:1)

banquePersonne中的局部变量,您无法从外部访问它。将min置于构造函数中以使其成为与其他方法类似的特权方法,或者使banque成为.nom之类的属性。

或者只是通过add方法执行所有操作:

Personne.prototype.min = function(number) {
    this.add(-number);
};

答案 1 :(得分:0)

您可以为banque设置一个getter,以便您可以使用原型。您似乎已经使用getCpte完成了此操作。只需使用该函数获取banque的值,并在原型函数赋值中使用它。如果您要修改banque函数之外的值,则还需要Personne的设置器(这会使banque基本上公开。要解决此问题,请设置min如果可能的话,在构造函数中的函数):

function Personne(nom){
  this.nom = nom;
  var banque = 1500;
  this.add = function(number){
    banque = banque + number
  }
  this.getCpte = function() { //banque getter
    return banque
  }
  this.setCpte = function(value) { //banque setter
    banque = value;
  }  
}

Personne.prototype.min = function(number){
  this.setCpte(this.getCpte() - number) //set to banque - number
}

var me = new Personne('albert')

console.log(me)
me.add(500)
me.min(500)
console.log(me.getCpte())

这增加了一个函数setCpte,它是banque的setter。这样,我们就可以使用this.setCpte(value),其中value是设置为banque的值。由于你做了banque - number,我们可以使用getter去除ReferenceError,并从中减去数字。