Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么变量在JS类中声明为“未定义”`_Javascript_Class - Fatal编程技术网

Javascript 为什么变量在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; 到 这是因为您实际上

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

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;
}