2016-01-20 11 views
10

コンストラクタ内の変数と外部の変数の宣言には違いがありますか?

関数の場合、 'this'は別の方法でバインドされていますが、変数については違いがあるかどうかはわかりません。 @ merianosニコスのコメントでES7クラス:コンストラクタ外のプロパティの宣言

class Widget { 
    constructor(constructorName) { 
    this.constructorName = constructorName; 
    } 
    nonConstructorName = "nonConstructorName1"; 
} 



var myWidget = new Widget("myConstructorName1"); 

console.log(myWidget.constructorName); // "myConstructorName1" 
console.log(myWidget.nonConstructorName); // "nonConstructorName1" 

myWidget.constructorName = "myConstructorName2"; 
myWidget.nonConstructorName = "nonConstructorName2"; 

console.log(myWidget.constructorName); // "myConstructorName2" 
console.log(myWidget.nonConstructorName); // "nonConstructorName2" 

console.log(myWidget.prototype.constructorName); // "undefined" 
console.log(myWidget.prototype.nonConstructorName); // "undefined" 

console.log(myWidget.__proto__.constructorName); // "undefined" 
console.log(myWidget.__proto__.nonConstructorName); // "undefined" 

var myNewWidget = new Widget("myConstructorName3"); 

console.log(myNewWidget.nonConstructorName); // "nonConstructorName1" 
+0

**は、この私のシナリオを参照している?** 「(メソッド以外)のプロトタイプ・データ・プロパティクラスのプロパティ、またはインスタンスのプロパティのいずれかを定義する直接的な宣言的な方法は、(意図的に)がありません。」 http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes –

+1

クラス定義内にプロパティを定義する方法があるかどうかはわかりません。 これに基づいて:https://babeljs.io/docs/learn-es2015/#classesここであなたのES6コードを試してみると、 'constructor'メソッドの外にプロパティ定義はありません:https:// babeljs。 io/repl/'constructor'メソッドの外でプロパティのdefnititionに対してES6トランスペラレータがエラーを生成することがわかります。 –

+0

あなたは、いくつかの良い答えがあるhttp://goo.gl/qzau3oこの質問を読むことは多分それはクラスの建設を外にいくつかのプライベートなプロパティをサイト外にしたい場合。 –

答えて

4

回答...

は「ここでのアプローチは、個人データを保存するために、民間である、コンストラクタ関数のスコープを使用することである。方法にについてこのプライベートデータにアクセスするには、コンストラクタ内で作成する必要があります。つまり、インスタンスごとに再作成します。これはパフォーマンスとメモリのペナルティですが、ペナルティが受け入れられると考えるユーザーもいます」

Private properties in JavaScript ES6 classes

関連する問題