更改当前闭包

Changing the current closure?

本文关键字:闭包      更新时间:2023-09-26

我正试图让一些旧代码以最小的修改正常工作。代码的编写是基于它将从特定上下文中运行的假设。我有context对象

原始代码:

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. contextwindowgBrowser外还有其他子代;这是一个例子

是否有一种方法来过渡我的oldExample代码正常工作,而不需要填充this.无处不在?例如,我如何在不同的上下文中运行oldExample ?

我知道如何做到这一点的唯一方法是将属性定义为当前上下文的变量:

var object = {gBrowser: 'test'};
function oldExample(){
    console.log(gBrowser);
}
var gBrowser = object.gBrowser;
oldExample();

这个例子输出'test'

但是这只是将属性访问移到了函数定义之外,并没有节省任何东西

你可以在javascript中使用bind方法。fixedExample。绑定(上下文);

现在你不需要在fixedExample中使用'this',而可以直接使用window。