Классы ES7: объявление свойств вне конструкции

Есть ли разница между объявлением переменных внутри конструктора и внешнего?

Для функций '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"

Ответ 1

Отвечать в комментариях @merianos-nikos...

"Подход здесь состоит в том, чтобы использовать область закрытой функции конструктора для хранения частных данных. Для того чтобы методы имели доступ к этим личным данным, они также должны быть созданы внутри конструктора, что означает, что вы воссоздаете они с каждым экземпляром. Это штраф за производительность и память, но некоторые считают, что штраф является приемлемым".

Частные свойства в JavaScript классах ES6