我正在学习 JavaScript 并读到函数就像对象并且可以设置如下属性:
var person = function(){
}
person.name="John Smith"; //output ""
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"
为什么 name 属性为空?
谢谢
我正在学习 JavaScript 并读到函数就像对象并且可以设置如下属性:
var person = function(){
}
person.name="John Smith"; //output ""
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"
为什么 name 属性为空?
谢谢
name
是一个特殊的属性,因为它在定义时给出了函数的名称:
function abc(){
}
在这种情况下, name 将返回 string "abc"
。此名称无法更改。在您的情况下,该函数没有名称,因此是空字符串。
您可以更改名称属性!
该Function.name
属性configurable
在 MDN 上有详细说明。
因为它是可配置的,所以我们可以改变它的writable
属性,以便它可以被改变。我们需要使用defineProperty来做到这一点:
var fn = function(){};
Object.defineProperty(fn, "name", {writable:true});
// now you can treat it like a normal property:
fn.name = "hello";
console.log(fn.name); // outputs "hello"
您可能想要使用 Prototype(请参阅JavaScript .prototype 如何工作?)或简单地将“人”转换为散列,如下所示:
var person = {};
person.name="John Smith"; //output "John Smith"
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"
您可以使用Object.defineProperty
来更改value
属性的(即使不触及其writeable
标志):
function fn () {}
console.log(fn.name) // Outputs fn
Object.defineProperty(fn, 'name', { value: 'newName' })
console.log(fn.name) // Outputs newName