为什么JS类内部声明的变量是“未定义的”
Why is the variable declared inside the JS class `undefined`
尝试在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;
相关文章:
- 为什么JavaScript抛出'未捕获的ReferenceError:var未定义'定义var时
- '会话'未定义-会话存储的Este JS/Express/Redis
- 使用+=运算符未定义对象中的第一个元素
- AngularJs 检查是否未定义和空的最佳实践
- 来自函数的返回对象在 jQuery 中未从 $.post 定义
- 未捕获的引用错误:函数未使用 onchange 定义
- 无法获取未定义node.js的方法get
- 未定义未捕获的引用错误函数
- 未捕获类型错误的coffescription:无法读取属性'offsetWidth'的未定义错误
- 在ColdFusion中表单范围中未定义AJAX请求的发布参数
- 未定义未捕获的ReferenceError$
- 不能调用未定义节点.js的方法“forEach”
- 未指定预定义 el 而不呈现的主干视图
- 主干不能调用未定义/未加载数据的方法“toJSON”
- $event未在文本输入的 ng-change 中定义
- 带有PHP(未定义索引)的Youtube API V3 GET横幅图像
- 未定义 ng 检查的默认值
- 未定义未捕获的引用错误函数
- 未捕获的类型错误: 无法读取未定义 Phaser.io 的属性“补间”
- 我的 JS 数组未定义 x 7 的问题