在javascript对象中声明的变量范围

时间:2012-11-06 01:21:18

标签: javascript

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

3 个答案:

答案 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());
};