代码之家  ›  专栏  ›  技术社区  ›  mck89

Chrome和Safari在JavaScript中的奇怪行为

  •  2
  • mck89  · 技术社区  · 14 年前

    我写了这段代码的和平:

    var a=function(){
    };
    
    a.name="test";
    a.prop="test2";
    

    现在,如果我使用控制台调试代码:

    console.log(a.name);
    console.log(a.prop);
    

    在火狐中我得到 a.name="test" a.prop="test2" 在Safari和Chrome的时候 ApPRP =“Test2” 但是 a.name="" .

    在WebKit浏览器中,似乎没有办法为函数分配“name”属性。你知道为什么吗?但最重要的是,你知道解决这个问题的方法吗?

    5 回复  |  直到 10 年前
        1
  •  6
  •   James    14 年前

    函数实例具有非标准的 name 属性,该属性将返回函数的名称,如果函数是匿名的,则返回空字符串(如您的)。当您试图写入属性时,浏览器会有不同的反应,所以我建议使用另一个属性名。

        2
  •  0
  •   Boris Delormas    14 年前

    有些单词在JS中是保留的,但有些浏览器仍然支持它们。

    请看这里: http://www.quackit.com/javascript/javascript_reserved_words.cfm

        3
  •  0
  •   lincolnk    14 年前

    为什么要尝试将属性分配给方法?这似乎违反了某些程序或惯例。如果要同时使用方法和属性,请创建一个新对象来包含它们。

        4
  •  0
  •   Wayne Werner    14 年前

    似乎无法更改匿名/lambda函数的名称。如果你想设置名字,你需要做一些像 var a=function b() {} 然后您可以设置名称。

        5
  •  0
  •   Poliveira    14 年前

    如您所见,“名称”不是一个选项,因此:

    var a = function(){
    };
    
    
    a.props={name:"test",prop:"test2",anyKey:"anyValue"};
    

    可能是个解决方案。