【问题标题】:Watching a function观看函数
【发布时间】:2014-04-07 23:06:46
【问题描述】:

我知道在 javascript 中我们可以观察属性变化,但是否可以观察函数?

如果我有一个计算结果为布尔值的函数

function eval(value) {
    return value == 1;
}

是否有可能不断评估这个函数直到为真?

我知道 setTimeout 可以工作,但这似乎是一个 hack。有没有更好的办法?

【问题讨论】:

  • 这是唯一的办法。
  • "...可以看功能吗?"看它做什么?您是否期望 function 改变,或者它的返回值? (例如,因为它的返回值是基于它关闭的东西。)
  • 不知道你说的手表是什么意思,也许你应该更具体一些或者提供一个用例。有用于“观察”函数/变量值的 angular 和 knockout 等框架。您还可以查看lodash 功能部分。它可能会有所帮助。
  • 您对“连续”的理解是什么?无限循环可能行不通……
  • 改函数名!我想这会引起歧义

标签: javascript watch


【解决方案1】:

有两种主要的可能方式,第一种是你的,setTimeout。第二个是setInterval:

var checkEval = setInterval(function(){eval(value)},1000);

您可以使用以下方式结束它:

clearInterval(checkEval);

【讨论】:

    【解决方案2】:

    用包装器替换函数

    function something(){
       return value==1;
    }
    
    (function(window){
      var oldSomething = window.something;
      window.something = function(){
         var result = oldSomething.apply(null,arguments);
         if(result===true){
            //do what you need
         } 
         return result;
      };
    })(window);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多