为什么在JS类`undefined`中声明变量

Ein*_*ren 3 javascript class

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

function Foo() {
    var weight = 10;
    console.log(weight);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ast*_*oCB 6

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

function Foo() {
    this.weight = 10;
}
Run Code Online (Sandbox Code Playgroud)

这设置weightFoo对象的属性,包括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 + ".";
Run Code Online (Sandbox Code Playgroud)