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。所以它很可能会经常更新。如果他们想让你能够调用它,他们会让它成为一个可调用的方法。您可以尝试向他们提交增强请求。