2016-02-25 11 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(); 
} 

Witam jestem nowy na tym maszynopis tutaj w klasie zwierząt Utworzyłem prywatną nazwę zmiennej użyłem że w klasie constructor.Now w klasie Tiger I stworzył instancję dla klasy Animal i może uzyskać dostęp do tej zmiennej prywatnej.możemy uzyskać dostęp do zmiennej prywatnej w innej klasy w maszynopisie

Moje pytanie jest w języku Java, jeśli zrobimy, dostaniemy błąd. Ale w typeScript (ponieważ maszynopis obsługuje oops) nie otrzymujemy żadnego błędu, a ponadto podaje on wartość, jak to jest możliwe?

Odpowiedz

11

Po pierwsze - Twój kod nie zostanie skompilowany. Maszynopis sprawdzi dostępność nazwy i da błąd. Sprawdź się na maszynopis Playground: playground

Po drugie - jest to możliwe dostępu prywatne właściwości jeśli usuniesz kontrole maszynopis, na przykład:

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

Działa to ze względu na fakt, że natywnie JavaScript nie mają pojęcia prywatnych nieruchomości (private properties). A ponieważ maszynopis jest skompilowany do javascript, masz taką możliwość.

+0

+1 Dobra odpowiedź. Chciałbym wspomnieć, że poleganie na tym, że "prywatne" nie jest prywatne w czasie wykonywania, utrudniłoby migrację kodu w pewnym momencie + znaczny spadek łatwości konserwacji. OP powinien ponownie przemyśleć swój projekt. – basarat

Powiązane problemy