Javascript 为什么变量在JS类中声明为“未定义”`
尝试在JS中创建具有以下代码中的属性权重的类:Javascript 为什么变量在JS类中声明为“未定义”`,javascript,class,Javascript,Class,尝试在JS中创建具有以下代码中的属性权重的类: function Foo() { var weight = 10; console.log(weight); } 当我用var bar=new Foo()实例化它时,10记录到控制台 当我稍后调用console.log(bar.weight)时,未定义记录到控制台。为什么呢?我的印象是,JS类中声明的属性在默认情况下是公共的?因为重量不是食物的属性,而是局部变量Change var weight = 10; 到 这是因为您实际上
function Foo() {
var weight = 10;
console.log(weight);
}
当我用var bar=new Foo()实例化它时代码>,10
记录到控制台
当我稍后调用console.log(bar.weight)时代码>,未定义
记录到控制台。为什么呢?我的印象是,JS类中声明的属性在默认情况下是公共的?因为重量不是食物的属性,而是局部变量Change
var weight = 10;
到
这是因为您实际上没有将weight
设置为bar
的属性;它只是在构造函数调用时创建的局部变量(这与其他一些语言不同,例如Java)。要将其创建为属性,需要使用关键字this
:
function Foo() {
this.weight = 10;
}
它将weight
设置为Foo
对象的属性,包括bar
,因此您应该能够毫无问题地使用console.log(bar.weight)
函数Foo(){
这个重量=10;
}
var bar=newfoo();
document.body.innerHTML=“bar
的权重属性等于“+bar.weight+”代码>变量不是属性。这不是Java,您必须显式使用This.weight
。var
始终在该范围内声明变量,无论函数如何调用或在何处调用。谢谢。与其他人的答案基本相同。但我认为这是最好的。(超过时限后接受)@EinarSundgren我很高兴能帮上忙。
function Foo() {
this.weight = 10;
}