在原始对象范围内调用函数

时间:2013-05-10 21:28:09

标签: javascript closures scope

好的,考虑到我不想修改的以下Javascript代码:

(function () {

    function iWantToCallThis(){
        // Do some stuff
    }

    window.SomeObject = {

        theirfunc = function(){
            // Do some stuff
        },

        otherFuncIDontWantToCall = function(){
            // This works, but don't want to call this function.
            iWantToCallThis();
            // does other stuff
        }

    }

}());

如何通过SomeObject的范围访问iWantToCallThis(),如下所示:

window.SomeObject.theirfunc = (function (func){
    iWantToCallThis();
    func.apply(this, arguments);
} (win.SomeObject.theirfunc));

即使我认为该功能在技术上运行在其原始范围内,我也无法访问iWantToCallThis()。有没有办法在不编辑原始源代码的情况下访问该功能?

谢谢!

3 个答案:

答案 0 :(得分:1)

简短的回答是,你不能。

答案很长,如果你改变主意不改变代码,然后返回iWantToCallThis,你最终可能会关闭。如果你做了很多,你可能会遇到性能问题。

答案 1 :(得分:1)

马修,

恕我直言,道格拉斯·克罗克福德的“Private Members in JavaScript”是关于这一主题的权威性文章。

除了通过特权方法之外,它应该有助于说服私人成员在外部无法访问。

答案 2 :(得分:0)

不,因为iWantToCallThis既没有从IIFE返回,也没有像SomeObject那样存储在公共名称空间/变量中,而且它们的函数是。

如果当然,你可以做的,就像你在第二个区块中开始做的那样,是手动重现该功能的内容并重新声明它。虽然由于它的范围,它无法自动获取函数的内容。