M. *_*lls 10 javascript ecmascript-7
对于函数,'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"
Run Code Online (Sandbox Code Playgroud)
@ merianos-nikos的评论中的回答......
"这里的方法是使用私有的构造函数的范围来存储私有数据.对于访问这些私有数据的方法,它们也必须在构造函数中创建,这意味着你要重新创建它们.这是一种表现和记忆惩罚,但有些人认为惩罚是可以接受的."