2016-11-15 41 views
0

在Javascript中我有从外部库中的以下功能:如何参数传递给回调无法获得母亲的功能在Javascript

getParentTabId(callback); 

在它被用于这样的代码的其他部分:

var openTab = function(result){ 
    var parentId = result.Id; 
    //opentNewTab is another external function 
    openNewTab(parentId, 'https://www.google.com'); 
} 

function handleOnClick(){ 
    getParentTabId(openTab); 
} 

这就是工作。我的目的是帕苏到openNewTab一个变量作为第二个参数,而不是使用固定的值,例如“https://www.google.com”,如下所示:

var openTab = function(result, url){ 
    var parentId = result.Id; 
    //opentNewTab is another external function 
    openNewTab(parentId, url); 
} 

我尝试以下:

function handleOnClick(){ 
    var url = 'http://stackoverflow.com'; 
    getParentTabId(function(result){ 
    openTab(url, result); 
    }); 
} 

但是它不因为回调无法看到url变量。考虑到我无法修改getParentTabId函数,您将如何解决此问题?

+2

'但它不工作,因为回调是无法看到的URL variable' - 这是不正确的。由于javascript关闭,回调可以看到url变量。 – Andrey

+1

难道你是在切换'url'和'result'参数吗? openTab需要一个'result,url',但是你在回调中写了'url,result'。 – Phortuin

回答

1

你可以尝试声明一个函数getOpenTab与动态URL返回openTab功能:

function getOpenTab(url) { 
    return function(result) { 
    var parentId = result.Id; 
    //opentNewTab is another external function 
    openNewTab(parentId, url); 
    } 
} 

function handleOnClick() { 
    getParentTabId(getOpenTab('www.foo.com')); 
} 

说明:您正确地指出,回调不“看” URL参数,因为在执行getParentTabId该回调称为callback(result)。这就是为什么你的回调函数必须动态创建的原因。

现在,如何创建一个具有动态内容的功能?很简单,只需制作另一个函数即可返回您的回调函数和所需的动态参数。

随着一个匿名函数整个事情变成:

function handleOnClick() { 
    var url = 'www.foo.com'; 
    getParentTabId(function(result) { 
    var parentId = result.Id; 
    openNewTab(parentId, url); 
    }); 
} 
+0

感谢您的回复。总之,我的方法有什么不同? – CiccioMiami

+0

我认为起初我误读了你已经试过的东西 - 看来现在唯一的区别是回调的正确实现(获得'parentId',用正确的参数顺序调用'openNewTab(parentId,url)'。 –