我试图让一些旧的代码在最低限度的修改下正常工作。编写代码的前提是,它将从特定的上下文中运行。我有上下文对象。
原始代码:
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);
}备注:
loadData和oldExample在单独的文件中定义。context除了window和gBrowser之外还有其他的子级;这是一个例子有没有一种方法可以将我的oldExample代码转换成正常工作,而不需要在任何地方填充this.?也就是说,如何在不同的上下文中运行oldExample?
发布于 2014-06-20 16:21:29
我知道如何这样做的唯一方法是将属性定义为当前上下文的变量:
var object = {gBrowser: 'test'};
function oldExample(){
console.log(gBrowser);
}
var gBrowser = object.gBrowser;
oldExample();此示例输出“测试”
但这只是将属性访问移到函数定义之外,并没有为您保存任何东西。
发布于 2014-06-20 15:20:11
可以在javascript中使用bind方法。fixedExample.bind (上下文);
现在,您不需要在fixedExample内部使用“this”,并且可以直接使用窗口。
https://stackoverflow.com/questions/24330302
复制相似问题