對名稱爲「name」的屬性的聲明始終是一個空字符串,無論我強制(硬編碼)多少值它。奇怪的部分是,這隻會在Chrome和Firefox中出現。 IE的工作原理非常好,我甚至沒有爲IE創建過這個功能。Javascript:名稱爲「name」的屬性在chrome/ff中爲空,而不是在IE中
這裏有一個小片段重現該問題:
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'是一個函數,並且函數已經具有'name'屬性,即使您沒有給該函數一個名稱,它也會內置到原型中,並且以後不能更改函數名稱。 – adeneo
^^是的,試試'var obj = function lulz(){}',你會看到「lulz」。 – elclanrs
[爲什麼我無法設置JavaScript函數的名稱屬性?](http://stackoverflow.com/questions/18904399/why-cant-i-set-a-javascript-functions-name-property) – Bergi