Chrome和Safari浏览器的Javascript
我写的代码,这个和平:Chrome和Safari浏览器的Javascript
var a=function(){
};
a.name="test";
a.prop="test2";
现在,如果我调试与控制台的代码:
console.log(a.name);
console.log(a.prop);
在Firefox中,我得到a.name="test"
和a.prop="test2"
,而在Safari和Chrome我得到a.prop="test2"
,但。
似乎没有办法在Webkit浏览器中为函数分配“name”属性。你知道为什么吗?但最重要的是,你知道一个解决方法吗?
一些单词在JS中保留,但一些浏览器仍然支持它们。
到这里看看:http://www.quackit.com/javascript/javascript_reserved_words.cfm
无关紧要。 'name'不是JavaScript中的保留字。问题是Function对象在某些浏览器中已经具有'name'属性。 – 2010-06-11 13:41:45
即使'name'是一个保留字,它也无关紧要,因为您可以使用保留字作为属性名称。 – 2010-06-11 13:47:19
你为什么要将属性赋值给方法?这看起来应该是违反某些程序或惯例。如果你想要一个方法和属性都可用,请创建一个新对象来包含它们。
功能是对象,可以很高兴地分配给它们的属性。只要你避免试图覆盖诸如'name'这样的内置属性,这是一个完全可以接受的事情。 – 2010-06-11 13:43:10
看来您不能更改匿名/ lambda函数的名称。如果您想设置名称,则需要执行类似var a=function b() {}
的操作,然后您可以设置名称。
我不这么认为。至少在Chrome中,名称属性仍然是只读的。 – 2010-06-11 13:49:34
正如你可以看到, “名” 是不是一种选择,那么:
var a = function(){
};
a.props={name:"test",prop:"test2",anyKey:"anyValue"};
可能是一个解决办法。
确认5.0.375.70。我尝试在'.function(){}'中分配.name,即使这样也行不通。 – 2010-06-11 13:39:31