2016-09-10 37 views
1
  1. 如何使我的最小功能工作。我得到的銀行是不確定的?

謝謝。javascript原型和私有變量

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

+1

'banque'不'Personne'功能之外存在...... – Li357

+0

我怎樣才能讓它存在,並保持它作爲私人VAR和使用原型方法? –

回答

0

你可以做的是建立一個getter方法banque所以你可以使用原型。看起來你已經用getCpte完成了。只需使用該函數即可獲得banque的值,並在原型函數分配中使用該值。

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())
:您還需要爲 banque二傳手,如果你想修改 Personne功能外的值(這將使 banque基本公共爲了解決這個問題,在構造函數中,如果在所有可能的設置 min功能)

什麼這增​​加了一個功能setCpte這是banque一個二傳手。這樣,我們可以使用this.setCpte(value),其中值是設置爲banque的值。既然你做了banque - number,我們可以使用getter來擺脫ReferenceError,並從中減去數字。

+1

這並沒有真正解決這個問題,'banque'可能是「私人的」 - 但它的價值可以直接設置 - 所以,它以什麼方式都是私人的?原始代碼你可以'添加',如果'min'完成了你可以減去的相同,但是你不能直接設置這個值 - 這就是變量所具有的「隱私」的程度 - 現在就好像變量是暴露...我想現在你可以在setCpte函數中加入一些邏輯來清理設置值,但這就是你從這個 –

+0

@JaromandaX得到的所有內容這是一個值得注意的巨大警告,但我不確定有任何其他方式可以通過OP來嘗試將其設置爲原型。我只是建議在'Personne'功能中設置它。 – Li357

1

banquePersonne中的局部變量,您無法從外部訪問它。將min放置在構造函數中,使其成爲像其他人一樣的特權方法,或者使banque屬性成爲.nom

或者只在通過add方法的一切:

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