javascript 原型和私有变量

javascript prototype and private variable

  1. 我怎样才能使我的 min 函数正常工作。我得到银行未定义?

谢谢。

  1. 列表项
  2. 列表项
  3. 列表项

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())

您可以为 banque 设置一个 getter,这样您就可以使用原型了。您似乎已经使用 getCpte 完成了此操作。只需使用该函数获取 banque 的值并在原型函数赋值中使用它。如果您想修改 Personne 函数之外的值,您还需要为 banque 使用 setter(这将使 banque 本质上是 public。为了解决这个问题, 如果可能的话在构造函数中设置 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),其中值是设置为 banque 的值。既然你做了 banque - number,我们可以使用 getter 来摆脱 ReferenceError,并从中减去数字。

banquePersonne内部的局部变量,不能从外部访问。要么将 min 放入构造函数中,使其成为像其他方法一样的特权方法,要么使 banque 成为 属性,如 .nom.

或者通过 add 方法完成所有操作:

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