2016-03-20 5 views
2

のは、私はこのような活字体で書かれたクラスしていると仮定しましょう:TypeScript:コンストラクタ内部とそれ以外の変数の宣言との違いは何ですか?

​​

このJavaScriptバージョンは、次のようになります。

var Messenger = (function() { 
    function Messenger() { 
     this.x = 10; 
     this.y = 20; 
    } 
    return Messenger; 
}()); 
; 

xとy変数は同じものにコンパイルされていますJavaScriptの違いは何ですか?

ありがとうございました。

答えて

0
それはコンパイルん

が、しかし、コンパイラはあなたにエラーメッセージを与える必要があり、そのyは右ここクラスメッセンジャーの一部ではありません:あなたはそれを回すない限り、コンパイラは、多くの場合、関係なく、エラーのコンパイルされますが

constructor(){ 
    this.y = 20; 
} 

あなたのtsconfig.jsonでオフにします。しかし、コンストラクタ内に変数を宣言する方法がありますが、それは本体にはなくパラメータリストにあります。このように:

constructor(public y: number){} 

のどちらかが彼らの前にprivatepublicを置きます。この方法では、変数は自動的にthis.y = y;を実行せずにコンストラクタに挿入するものに設定されます。これは、コンストラクタに常に挿入する変数を作成する非常に簡単な方法です。

あなたも、あなたがコンストラクタに引数を挿入しない場合は動作しますデフォルトのパラメータを与えることができます。

constructor(public y = 20){} 

は、より多くの情報のためthis articleをチェックしてください。

2

これは実際に正しい活字体である:

class Messenger { 
    x = 10; 
    y: number; 

    constructor() { 
     this.y = 20; 
    } 
} 

あなたは(JavaScriptで必要とされていない)クラスのプロパティを宣言する必要があります。 JavaScriptで同じようにコンパイルするので、ランタイムに違いはありません。しかし、y: number + this.y = 20よりちょうどx = 10(プロパティが正しく型付けされています)を書く方が簡単な場合もあります。したがって、パラメータから来ていないプロパティのデフォルト値がある場合は、それより少ない文字で書くことができます。

関連する問題