我试图了解javascript对象中变量的范围。但我得到的行为似乎有点不起作用。简单地说,如果我有一个将函数定义为变量的对象,那么函数变量就无法访问其定义的对象的其他变量。下面的代码将使事情变得清晰。
<html>
<head>
<script type="text/javascript">
var someObject = {
someVariable : 5,
getVariable: function() {
return someVariable;
}
};
window.onload = function () {
alert(someObject.getVariable());
};
</script>
</head>
<body>
Hello There
</body>
</html>
上面的代码为函数getVariable()中的someVariable提供了“ReferenceError:someVariable is not defined”。有人想评论这种行为吗?
答案 0 :(得分:3)
绝对
您所谈论的“变量”不是“变量”,它是对象的property
(对象恰好是变量)。
因此,您有两种选择 假设您的对象是这样的:
var obj = {
property : 42,
everything : function () { /* ... */ }
};
函数体内部的两个选项,返回值42是:
obj.property;
OR
this.property;
致电时:
obj.everything();
JS解释器会将obj
视为等于函数内部的this
或者您直接引用obj
本身,并使用property
点符号或.property
括号表示法访问["property"]
。
答案 1 :(得分:1)
这不是变量,即对象的属性/字段。
尝试this.someVariable
。
此处this
是指向对象的(非常特殊的)变量,点(或方括号)语法可用于访问该对象的字段。
您也可以在someObject.someVariable
(指向对象的另一个变量)在范围内的地方执行someObject
。
答案 2 :(得分:0)
尝试this.someVariable
:
var someObject = {
someVariable: 5,
getVariable: function () {
return this.someVariable;
}
};
window.onload = function () {
alert(someObject.getVariable());
};