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

Javascript 在对象的原始范围内调用函数,javascript,closures,scope,Javascript,Closures,Scope,好的,给定以下我不想修改的Javascript代码: (function () { function iWantToCallThis(){ // Do some stuff } window.SomeObject = { theirfunc = function(){ // Do some stuff }, otherFuncIDontWantToCall = function

好的,给定以下我不想修改的
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()

window.SomeObject.theirfunc = (function (func){
    iWantToCallThis();
    func.apply(this, arguments);
} (win.SomeObject.theirfunc));
<>尽管我认为这个函数在其原始范围内是在技术上运行的,但我不能访问<代码> IWANTCOOLATIONS()/<代码>。是否有任何方法可以在不编辑原始源代码的情况下访问该函数


谢谢大家!

否,因为
我想调用此
既不是从IIFE返回的,也不是存储在公共名称空间/变量中,就像SomeObject和它们的rfunc一样


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

简单的回答是,您不能

很长的答案是,如果你改变主意不更改代码,然后返回
i want调用此
,你可能最终会结束。如果您经常这样做,可能会出现性能问题。

Matthew

道格拉斯·克罗克福德的“”是关于这一主题的权威性文章


它应该有助于说服您,除非通过特权方法,否则私有成员在外部是不可访问的。

您不能
iwanttocall此
是自动执行匿名函数的本地函数。道格拉斯·克罗克福德的“”是关于这个话题的权威性文章。这应该有助于说服你,除非通过特权方法,否则私人成员是无法访问的。伟大的文章@Beetroot Beetroot,介意把它作为一个答案,我会接受它吗?这无疑为我所遇到的问题提供了更好的深入解释。遗憾的是,我无法再现内容,因为函数会更改其他“非作用域”变量:(哦,好吧,那就是你的答案:)我已经通过修改第三方源代码对其进行了修复,但我不想求助于此,因为我试图进行所有的“破解”不直接修改源代码。如果有人用一个新版本更新了源代码,黑客就会消失,而不是出现在一个单独的文件中。那个第三方软件是已知的JS框架吗?是的,是HighCharts。所以它很可能会经常更新。如果他们想让你能够调用它,他们会让它成为一个可调用的方法。您可以尝试向他们提交增强请求。