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

こんにちは、私はクラスTigerのクラスconstructor.Nowに、私はインスタンスを作成することを使用するプライベート変数名を作成した動物のクラスで、ここでこの活字体に新しいですtypescriptです内の別のクラスのプライベート変数にアクセスすることができますAnimalクラスのために、そのプライベート変数にアクセスすることができます。は、我々は

私の質問はJavaでエラーが発生します。しかし、typeScript(typescriptはoopsをサポートしているため)ではエラーは発生しません。

答えて

11

まず、コードはコンパイルされません。 Typescriptは名前のアクセシビリティをチェックし、エラーを返します。 typescriptです遊び場で自分を確認してください:playground

二 - あなたは、たとえば、typescriptですチェックを削除する場合はそれが可能アクセスプライベートプロパティです:

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

これが原因でネイティブのJavaScriptが概念を持っていないという事実のために動作します私有財産(private properties)。そして、typescriptはjavascriptにコンパイルされているので、あなたはそのような可能性があります。

+0

+1いい回答です。 'private'が実行時にプライベートではないという事実に依存すると、ある時点でコードの移行が難しくなり、メンテナンス性が大幅に低下します。 OPは彼らのデザインを再考してください。 – basarat

関連する問題