调用javascript对象的问题

时间:2012-09-20 17:33:26

标签: javascript oop variables object

我对javascript对象相当新,我可以对调用变量使用一些说明。我试图在bar函数中调用测试变量。这可能吗?如果是这样,我该如何正确地做到这一点?

var foo = {

    bar: function()
    {
        var test = 'Hello World';
    },

    speak: function()
    {
        // Log the Variable from above ^^
        console.log(foo.bar.test);
    }

};

由于

4 个答案:

答案 0 :(得分:2)

没有;局部变量在其声明函数之外是不可见的。

相反,您需要向对象添加属性:

foo.test = ...;

你也可以设置foo.bar.test;这将为函数对象添加属性。

答案 1 :(得分:1)

当你在函数中声明一个局部变量时,你将它添加到函数的VariableEnvironment(它与外部LexicalEnvironment基本没有区别,但ECMA区分它们)。该函数引用了声明它的范围的LexicalEnvironment(在我们的例子中,是全局对象窗口)。当您尝试从函数内部引用变量时,引擎首先在其中搜索函数的本地VariableEnvironment,然后,如果未找到,则在外部{{1 }}。在您的情况下,您尝试从函数的外部引用变量,因此引擎在一开始就在全局对象的范围内搜索它。

因此,要完成任务,您应该在外部scrope中声明变量,然后在函数内部分配它,或者您应该向对象添加一个新属性然后引用它:

LexicalEnvironment

答案 2 :(得分:0)

您可以通过调用bar方法返回测试。

var foo = {

    bar: function()
    {
        var test = 'Hello World';
       return test;
    },

    speak: function()
    {
        // Log the Variable from above ^^
        console.log(foo.bar());
    }

};

答案 3 :(得分:0)

为了以这种方式访问​​变量测试,您需要将其定义为对象的属性,如下所示:

var foo = {
    test: 'Hello World, before calling bar()',
    bar: function()
    {
        this.test = 'Hello World';
    },
    speak: function()
    {
        // Log the Variable from above ^^
        console.log(this.test);
    }
};
console.log(foo.test);

我还使用关键字this更改了访问对象foo的函数。它通常会起作用,但有时候在javascript中跟踪你的范围可能会很棘手,所以只是试着去了解它。