JavaScript:将函数存储在对象中,但在本地上下文中执行它

时间:2014-07-03 09:34:47

标签: javascript function object scope

我有一个这样的对象:

objectx = {
    1: {
        name: "first",
        loadFunction: function() { 
            $(target).load("http://stackoverflow.com #question", function() {
                // do something else
            });
        }
    },
    2: {
        name: "second",
        loadFunction: function() { 
            $(target).load("http://stackoverflow.com #answer", function() {
                // do something else
            });
        }
    }
}

当我用objectx [1] .loadFunction()调用函数时,它们没有本地上下文,所以我必须将所有内容作为参数传递或使我的变量全局化。例如:

function doSomething() {
    var target; // this variable holds a reference to a DOM object

    objectx[1].loadFunction()
}
  

目标未定义

如何执行这些功能,以便他们了解调用它们的上下文?

2 个答案:

答案 0 :(得分:2)

这是不可能的(你的方式),因为词法范围在JavaScript中是如何工作的。

你想要一个简单明了的函数参数。无论如何,编写依赖全局状态的函数都是糟糕的风格。

var objectx = {
    1: {
        name: "first",
        loadFunction: function(target) { 
            $(target).load("http://stackoverflow.com #question", function() {
                // do something else
            });
        }
    }
}

function doSomething() {
    var target; // this variable holds a reference to a DOM object

    objectx[1].loadFunction(target);
}

完成。

答案 1 :(得分:1)

这在JavaScript中是不可能的。 JS使用词汇scoping。你似乎在寻找的是动态范围。

您可以做的最好的事情是传递参数,在范围内定义它,或使用全局变量(小于推荐值)。