Javascript:名为";名称“;在chrome/ff中为空,而在IE中为空
名为“name”的属性声明始终是空字符串,无论我对其强制(硬编码)了多少值。奇怪的是,这似乎只发生在Chrome和Firefox上。IE工作得非常好,我甚至没有为IE做这个 这里有一个小片段来重现这个问题:Javascript:名为";名称“;在chrome/ff中为空,而在IE中为空,javascript,internet-explorer,google-chrome,inheritance,Javascript,Internet Explorer,Google Chrome,Inheritance,名为“name”的属性声明始终是空字符串,无论我对其强制(硬编码)了多少值。奇怪的是,这似乎只发生在Chrome和Firefox上。IE工作得非常好,我甚至没有为IE做这个 这里有一个小片段来重现这个问题: var fn = function() { this.name = "Hello World" this.foo = "bar" } // Create a blank function. var obj = function() {}; // replacing the
var fn = function() {
this.name = "Hello World"
this.foo = "bar"
}
// Create a blank function.
var obj = function() {};
// replacing the code below with 'var o = new fn()' doesn't make a difference.
var o = Object.create(fn.prototype);
fn.apply(o);
for (var i in o) {
// This line will print:
// name = Hello World
// foo = bar
console.log(i + ' = ' + o[i]);
// Apply them to the 'empty' function.
obj[i] = o[i];
}
console.log(obj.name); // prints ""
console.log(obj.foo); // prints "bar"
// Hardcode a value, just because I'm aggresive and frustrated.
obj.name = "test?"
console.log(obj.name); // still prints empty string :(
我不想听到对象构造的替代方案,我只想知道为什么这个特定的实现在Chrome和FF中不起作用,而在所有IE版本中都起作用,包括11。obj是一个函数,并且函数已经有一个
名称
属性,它内置在原型中,即使没有给函数命名,以后也不能更改函数名,它甚至在规范中
无法更改函数的名称,此属性为只读:
如果它在IE中工作,那么IE是错误的。
obj
是一个函数,并且一个函数已经有了一个名称
属性,它内置在原型中,即使您没有给函数命名,以后也不能更改函数名称,它甚至在规范中
无法更改函数的名称,此属性为只读:
如果它在IE中工作,那么IE是错误的。
obj
是一个函数,并且一个函数已经有了一个名称
属性,它内置在原型中,即使您没有给函数命名,以后也不能更改函数名称,它甚至在规范中
无法更改函数的名称,此属性为只读:
如果它在IE中工作,那么IE是错误的。
obj
是一个函数,并且一个函数已经有了一个名称
属性,它内置在原型中,即使您没有给函数命名,以后也不能更改函数名称,它甚至在规范中
无法更改函数的名称,此属性为只读:
如果它在IE中工作,那么IE是错误的。name已经是某些浏览器中函数的属性 或“”用于匿名函数
var obj = function testfun() {};
obj.name
/* returned value: (String) testfun */
尽管您对对象创建语法不感兴趣
对象(但不是函数)可以具有名称“test”:
var obj2={};
obj2.name='test';
obj2.name
/* returned value: (String) test */
name已经是某些浏览器中函数的属性 或“”用于匿名函数
var obj = function testfun() {};
obj.name
/* returned value: (String) testfun */
尽管您对对象创建语法不感兴趣
对象(但不是函数)可以具有名称“test”:
var obj2={};
obj2.name='test';
obj2.name
/* returned value: (String) test */
name已经是某些浏览器中函数的属性 或“”用于匿名函数
var obj = function testfun() {};
obj.name
/* returned value: (String) testfun */
尽管您对对象创建语法不感兴趣
对象(但不是函数)可以具有名称“test”:
var obj2={};
obj2.name='test';
obj2.name
/* returned value: (String) test */
name已经是某些浏览器中函数的属性 或“”用于匿名函数
var obj = function testfun() {};
obj.name
/* returned value: (String) testfun */
尽管您对对象创建语法不感兴趣
对象(但不是函数)可以具有名称“test”:
var obj2={};
obj2.name='test';
obj2.name
/* returned value: (String) test */
这显然是因为
obj
是一个函数,而且一个函数已经有了name
属性,它内置在原型中,即使你没有给函数命名,你以后也不能更改函数名。^^^是的,只要试试var obj=function lulz(){}
你就会看到“lulz”.可能的重复以及它与IE一起工作的原因是因为IE很奇怪。:)这显然是因为obj
是一个函数,而且一个函数已经有了name
属性,它内置在原型中,即使你没有给函数命名,你以后也不能更改函数名。^^^是的,只要试试var obj=function lulz(){}
你就会看到“lulz”.可能的重复以及它与IE一起工作的原因是因为IE很奇怪。:)这显然是因为obj
是一个函数,而且一个函数已经有了name
属性,它内置在原型中,即使你没有给函数命名,你以后也不能更改函数名。^^^是的,只要试试var obj=function lulz(){}
你就会看到“lulz”.可能的重复以及它与IE一起工作的原因是因为IE很奇怪。:)这显然是因为obj
是一个函数,而且一个函数已经有了name
属性,它内置在原型中,即使你没有给函数命名,你以后也不能更改函数名。^^^是的,只要试试var obj=function lulz(){}
你就会看到“lulz”.可能的重复以及它与IE一起工作的原因是因为IE很奇怪。:)我无意更改函数的整个名称。我只想有一个名为“name”的属性:(@Harold-但对象是一个函数,它已经有了name属性,它是你给函数的名称或一个空字符串,你不能改变它。你必须使用另一个属性或一个不是函数的对象。好吧,很高兴知道我这方面不是一个奇怪的bug:)谢谢你的回答。(可以在3分钟内标记为已接受)。我无意更改函数的完整名称。我只想有一个名为“name”的属性:(@Harold-但对象是一个函数,它已经有了name属性,它是你给函数的名称或一个空字符串,你不能改变它。你必须使用另一个属性或一个不是函数的对象。好吧,很高兴知道我这方面不是一个奇怪的bug:)谢谢你的回答。(可以在3分钟内标记为已接受)。我无意更改函数的完整名称。我只想有一个名为“name”的属性(@Harold-但对象是一个函数,它已经有了name属性,它是您给函数的名称或空字符串,您不能更改它。