为什么JS类内部声明的变量是“未定义的”

Why is the variable declared inside the JS class `undefined`

本文关键字:未定义 未定义的 变量 内部 声明 为什么 JS      更新时间:2023-09-26

尝试在JS中创建一个具有以下代码中的属性权重的类:

function Foo() {
    var weight = 10;
    console.log(weight);
}

当我用var bar = new Foo();实例化它时,10会被记录到控制台。

当我稍后调用console.log(bar.weight);时,undefined会记录到控制台。为什么?我的印象是JS类中声明的属性在默认情况下是公共的?

这是因为您实际上还没有将weight设置为bar的属性;它只是在构造函数调用时创建的一个局部变量(这与其他一些语言不同,例如Java)。要将其创建为属性,需要使用关键字this:

function Foo() {
    this.weight = 10;
}

这将weight设置为Foo对象(包括bar)的属性,因此您应该能够毫无问题地使用console.log(bar.weight)

function Foo() {
  this.weight = 10;
}
var bar = new Foo();
document.body.innerHTML = "<code>bar</code>'s weight property is equal to " + bar.weight + ".";

因为重量不是食物的属性,而是一个局部变量,所以更改

var weight = 10;

this.weight = 10;