1

我试图了解 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” 。有人想评论这种行为吗?

4

3 回答 3

3

绝对地。

您正在谈论的“变量”不是“变量”,它是property一个对象(对象恰好是一个变量)。

因此,您有两个选择。
假设您的对象是这样制作的:

var obj = {
    property : 42,
    everything : function () { /* ... */ }
};

函数体内部返回值 42 的两个选项是:

obj.property;

或者

this.property;

你打电话时:

obj.everything();

JS 解释器将obj被视为等于this函数内部。
或者您直接引用obj自身,并property使用.property点符号或["property"]括号符号进行访问。

于 2012-11-06T01:27:00.690 回答
1

那不是变量,而是对象的属性/字段。

试试this.someVariable

this是一个指向对象的(相当特殊的)变量,点(或方括号)语法可用于访问该对象的字段。

您也可以someObject.someVariablesomeObject(指向对象的另一个变量)在范围内的地方执行此操作。

于 2012-11-06T01:23:35.453 回答
0

尝试this.someVariable

var someObject = {
        someVariable: 5,
        getVariable: function () {
            return this.someVariable;
        }
    };

window.onload = function () {
    alert(someObject.getVariable());
};
于 2012-11-06T01:22:57.167 回答