1

好吧,鉴于以下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
        }

    }

}());

我怎样才能iWantToCallThis()像这样通过 SomeObject 的范围进行访问:

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

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

谢谢!

4

3 回答 3

1

简短的回答是你不能。

长答案是,如果您改变主意不更改代码,然后 return iWantToCallThis,您最终可能会关闭。如果你经常这样做,你可能会遇到性能问题。

于 2013-05-10T21:34:08.640 回答
1

马修,

恕我直言,Douglas Crockford 的“ JavaScript 中的私有成员”是关于该主题的权威文章。

它应该有助于说服您 Private 成员在外部无法访问,除非通过 Privileged 方法。

于 2013-05-13T16:35:49.737 回答
0

不,因为iWantToCallThis既不会从 IIFE 返回,也不会存储在像 SomeObject 和 theirfunc 这样的公共命名空间/变量中。

当然,您可以做的,就像您在第二个块中开始做的那样,是手动复制该函数的内容并重新声明它。尽管由于其作用域,这将无法自动获取函数的内容。

于 2013-05-10T21:31:37.313 回答