10

コンストラクター内と外側で変数を宣言することに違いはありますか?

関数の場合、「this」のバインドは異なりますが、変数の場合、違いがあるかどうかわかりません。

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"
4

1 に答える 1

5

@merianos-nikos のコメントで回答...

「ここでのアプローチは、プライベートなコンストラクター関数のスコープを使用して、プライベート データを格納することです。メソッドがこのプライベート データにアクセスできるようにするには、コンストラクター内でも作成する必要があります。つまり、すべてのメソッドで再作成することを意味します。インスタンス。これはパフォーマンスとメモリのペナルティですが、ペナルティは許容できると考える人もいます。」

JavaScript ES6 クラスのプライベート プロパティ

于 2016-01-20T08:53:02.573 に答える