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 回答