改变目前的关闭?

时间:2014-06-20 15:04:02

标签: javascript closures this

我试图通过最少的修改来使一些旧代码正常工作。代码是在假设它将从特定上下文运行的情况下编写的。我有上下文对象。

原始代码:

function oldExample(){
    console.log(window); //New Error: window is undefined
    console.log(gBrowser); //New Error: gBrowser is undefined
}

新的,有效的代码:

function fixedExample(){
    console.log(this.window);
    console.log(this.gBrowser);
}

//Elsewhere
function loadData(context) {
    fixedExample.call(context);
}

注意:
1. loadDataoldExample在单独的文件中定义 2. context除了windowgBrowser之外还有其他孩子;这是一个例子

有没有办法让我的oldExample代码转换为正常工作,而无需在任何地方填充this.?即,如何在不同的上下文中运行oldExample?

2 个答案:

答案 0 :(得分:0)

您可以在javascript中使用bind方法。 fixedExample.bind(context);

现在你不需要使用'这个'在fixedExample里面,可以直接使用窗口。

答案 1 :(得分:0)

我知道如何执行此操作的唯一方法是将属性定义为当前上下文的变量:

var object = {gBrowser: 'test'};

function oldExample(){
    console.log(gBrowser);
}

var gBrowser = object.gBrowser;
oldExample();

此示例输出' test'

但所有这一切都是在属性定义之外移动属性访问,不会为你节省任何东西。