【问题标题】:how compare two static function are equal or not in javascript [duplicate]如何在javascript中比较两个静态函数是否相等[重复]
【发布时间】:2009-12-20 20:39:54
【问题描述】:

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

【问题讨论】:

  • 为什么要比较它们?

标签: javascript


【解决方案1】:
String(f1) === String(f2)

【讨论】:

  • 我认为你的意思是 String(f1) === String(f2) 除非你有一个我不知道的自定义 string() 方法:)
  • 另一种写法,对于节省字节的人来说:""+f1 === ""+f2
  • 它是否适用于(String(f1.bind(this)) === String(f1.bind(this)))?我不这么认为?
【解决方案2】:
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 - 你可能永远不应该这样做。

【讨论】:

  • +1 以获得更详细的答案
  • 请注意,var f1 = f2 = function(){ ... } 导致 f2 成为全局属性,因为未声明的函数分配给 f2。未声明的分配通常是有害的,所以最好避免这种模式。另外,不要依赖Function.prototype.toString——它不是标准化的,并且因浏览器而异。
  • 我刚刚在IE 6, 7, 8, FF 2, 3.0, 3.5 (Windows / Linux), Opera 10 (Windows / Linux), Safari 4, and Chrome (Windows / Linux)。您具体为哪些浏览器开发?征服者,哈哈?这是代码,有人证明我错了javascript:(function(){var f1=function(a){return a;},f2=function(a){return a;};alert(f1.toString());alert(f2.toString());alert(""+f1==""+f2);})();
  • 这里有几个我偶然发现的——perfectionkills.com/those-tricky-functions,所以我不会依赖它。当然是 YMMV ;)
  • 我只是尽量避免会导致使用函数反编译的设计。在封闭环境中工作(例如在 Intranet 应用程序中)或出于调试/分析目的(在开发期间)时,您当然可以反编译函数。任何用于公共网络的东西都最好不使用它,因此在一些不太常见的环境中爆炸的可能性较小。
【解决方案3】:

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

假设我有一对将回调作为参数之一的库函数。为了这个例子,create1minuteCallback 函数将设置一个 1 分钟的计时器,并在每个滴答时调用回调。 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);

【讨论】:

    【解决方案4】:

    好吧,就这么简单——如果你要比较函数,你这样做是有原因的。你的理由是什么? 我的原因是不要两次运行某个功能。 我是这样做的(只是 sn-p 代码来了解这个想法)

       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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2021-05-23
      相关资源
      最近更新 更多