2017-10-13 5 views
0

Je veux construire une classe en utilisant javascript comme en c, le principal problème est l'attribut private.Javascript define variable privée

var tree = { 
    private_var: 5, 
    getPrivate:function(){ 
    return this.private_var; 
    } 
}; 
console.log(tree.private_var);//5 this line want to return unaccessible 
console.log(tree.getPrivate());//5 

donc je veux détecter l'accès de tree.private_var et retour unaccessible et this.private_var retour 5.
Ma question est: Y at-il un moyen de définir l'attribut privé en javascript?

EDIT: J'ai vu cette façon

class Countdown { 
    constructor(counter, action) { 
     this._counter = counter; 
     this._action = action; 
    } 
    dec() { 
     if (this._counter < 1) return; 
     this._counter--; 
     if (this._counter === 0) { 
      this._action(); 
     } 
    } 
} 
CountDown a; 

a._counter est pas accessible? mais

+0

mais quoi? On dirait que vous n'avez pas fini la question. – Barmar

Répondre

1

Définir tree en fonction au lieu d'objet JavaScript, définir la variable privée dans la fonction par var mot-clé, définir la fonction d'obtenir du public par this. mots clés et créer une nouvelle instance en utilisant la fonction

var Tree = function(){ 
    var private_var = 5; 
    this.getPrivate = function(){ 
     return private_var; 
    } 
} 

var test = new Tree(); 
test.private_var; //return undefined 
test.getPrivate(); //return 5 

En ES6, vous pouvez le faire, mais il est pas pris en charge par IE donc je ne recommanderais pas

class Tree{ 
    constructor(){ 
     var private_var =5; 
     this.getPrivate = function(){ return private_var } 

    } 
} 

var test = new Tree(); 
test.private_var; //return undefined 
test.getPrivate(); //return 5 
+0

Vous ne montrez pas comment le faire en utilisant la syntaxe de la classe ES6. – Barmar

+0

Merci @SolomonTam, définir la classe de cette façon sera bon en javascript. –

+0

'donc je ne recommanderais pas??' Donc je recommanderais' –