在函数内部从外部插入一个新函数

时间:2015-04-03 10:25:03

标签: javascript scope nested

是否可以从外部在函数范围内插入新动作? 例如:

       function main(){
           //I want to insert in here new action to perform
       }

       var dosomething = function() { 
             console.log("I want to be inside the main");
       }

       main();

如何让函数main永久执行函数dosomething? 之后,如何从dosomething中取出main函数?
这个概念或多或少是这样的:

    function main(){
           //I want to insert in here new actions to perform
    }

    var dosomething = function() { 
             console.log("I want to be inside the main");
    }


   *insert dosomething in main*

   //This is how it should look now the function main:
   function main(){
          dosomething();
   }


   *erase dosomething from main*

   //The function main come back to be empty:
   function main(){
   }

我找到的唯一解决方案是让函数main执行数组中的所有函数,并使用此数组从外部插入/取出函数。有没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

  

如何使函数main永久执行dosomething函数?

你可以装饰它,比如

var oldmain = main;
main = function() {
    doSomething();
    return oldmain.apply(this, arguments);
}
  

之后,如何从main中取出dosomething函数?

不,你不能。函数是这方面的不可变对象,不能被分解。您唯一能做的就是再次使用oldmain

  

我想使用这种技术在这个循环中简单地添加和删除动画:

function main(){ window.requestAnimationFrame(main); }
     

我找到的唯一解决方案是使函数main执行数组内的所有函数,并使用此数组从外部插入/取出函数。

对于动态大小的动画,这是一个完美的解决方案。它没有错。