如何在javascript中比较两个静态函数是否相等

时间:2009-12-20 20:39:54

标签: javascript

如何比较javascript中的两个静态函数是否相等?

4 个答案:

答案 0 :(得分:6)

String(f1) === String(f2)

答案 1 :(得分:6)

var f1 = f2 = function( a ){ return a; };

在这里,您可以使用f1 === f2,因为它们指向相同的内存并且它们是相同的类型

var f1 = function( a ){ return a; },
    f2 = function( a ){ return a; };

这里你可以使用Andy E使用的字节保护程序(它隐式地将函数转换为它的正文文本作为字符串),

''+f1 == ''+f2

这是场景背后发生的事情的要点:

f1.toString( ) == f2.toString( )  

编辑:回顾这篇文章一年后,我同意@kangax - 你可能永远不会这样做。

答案 2 :(得分:0)

每当我需要比较函数时,我确保没有范围模糊并使用相同的函数对象。

假设我有一对库函数将回调作为参数之一。为了这个例子,create1minuteCallback函数将设置一个1分钟的计时器并在每个tick上调用回调。 kill1minuteCallback将关闭回调,您必须传递与create1minuteCallback相同的回调函数。

function create1minuteCallback(callback){
//implementation
}

function kill1minuteCallback(callback){
//implementation
}

很明显这不会起作用,因为我们传递的函数在第二行是不同的:

create1minuteCallback(function(){alert("1 minute callback is called");});
kill1minuteCallback(function(){alert("1 minute callback is called");});

我通常这样做:

function callbackFunc(){alert("1 minute callback is called");}

create1minuteCallback(callbackFunc);
kill1minuteCallback(callbackFunc);

答案 3 :(得分:0)

嗯,就像那样 - 如果你要比较函数,你这样做是出于我假设的原因。你的理由是什么? 我的理由是两次没有运行某个功能。 我这样做了(只是片段代码才能得到这个想法)

   var x = function(){
    console.error("i am a functionX");
  }
   var y = function(){
        console.error("i am a functionX");



  }

    var z = function(){
       console.error("i am a functionZ");



  }
       var x2= x;

   var obj = new Object();
    obj[x] = "";
    obj[x2] = "";
    obj[y] = "";
    obj[z] = "";
    obj.abc = "xaxa";
                for (prop in obj) {
                    if (obj.hasOwnProperty(prop)) {
                      console.error(obj[prop] + " hello " + prop);
                    }
            }

函数x和y是相同的,即使它们具有不同的空格。 x和y与z不同,因为z具有不同的console.error。 Btw open your firebug console to see it in the jsbin example