2016-02-25 14 views
5
class Animal { 
    private name:string; 
    public Firstname:string; 
    constructor(theName: string) 
    { 
     this.name = theName; 
     this.Firstname=theName; 
    } 
} 

class Tiger { 
    function sample(){ 
     Animal animalName=new Animal('Tiger'); 
     document.body.innerHTML = animalName.name; 
    } 
    sample(); 
} 

Salve sono nuovo di questo dattiloscritto qui in classe animale che ho creato un nome di variabile privata che ho usato in classe constructor.Now in classe Tiger ho creato l'istanza per classe Animal e in grado di accedere a quella variabile privata.Possiamo accedere a una variabile privata in un'altra classe a macchina

La mia domanda è in java se lo facciamo otterremo l'errore. Ma in typeScript (perché typescript supporta oops) non otteniamo alcun errore inoltre sta dando il valore come è possibile?

risposta

11

Primo: il tuo codice non verrà compilato. Typescript controllerà l'accessibilità del nome e ti darà un errore. Mettetevi al playground dattiloscritto: playground

In secondo luogo - è possibile accedere alle proprietà private, se si rimuove controlli tipografico, ad esempio:

console.log((<any>animalName).name) 

Questo funziona a causa del fatto che in modo nativo JavaScript non hai idea di proprietà private (private properties). E siccome il dattiloscritto è compilato in javascript, hai questa possibilità.

+0

+1 buona risposta. Vorrei dire che basarsi sul fatto che 'private' non è privato in runtime renderebbe la migrazione del codice più difficile a un certo punto + diminuirà notevolmente la manutenibilità. OP dovrebbe per favore ripensare il loro design. – basarat

Problemi correlati