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

时间:2015-03-01 21:32:48

标签: javascript class

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

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

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

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

2 个答案:

答案 0 :(得分:6)

那是因为您还没有将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 + ".";
&#13;
&#13;
&#13;

答案 1 :(得分:3)

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

var weight = 10;

this.weight = 10;