2016-07-16 62 views
4

我是JavaScript新手。当我访问person函数的name属性时,有人能解释为什么我会得到意想不到的值吗?为什么name属性与我设置的值不同?

var name = function() { 
    console.log('name'); 
} 

function person() { 
    console.log('hello person'); 
} 

person.name = "hello"; 

console.log(person.name); // logs "person" 

回答

1

Function.name为函数定义的非可写和不可枚举属性。因此,即使你

person.name = "hello";

它没有得到覆盖。它返回函数名称。

1

如果检查nameproperty descriptor你会看到,它不是写:

function person() { 
 
    console.log('hello person'); 
 
} 
 

 
var descriptor = Object.getOwnPropertyDescriptor(person, 'name'); 
 

 
console.log(descriptor);

正如你可以看到它有"writable": false,这意味着你不能改变的功能name

+0

“不可改变的”!==不可写的。 – 2016-07-16 10:05:05

+0

@torazaburo Ops,当然。谢谢! – dfsq

1

检查definePropertydoc

它可以定义属性是不可枚举的和不可写通过赋值运算符

当且仅当与属性关联的值可能为 ,并且使用赋值运算符更改。

枚举

真当且仅当该属性对应的对象上的 属性的枚举期间显示出来。

namefunction对象的一个​​这样的属性。

可写没有

可枚举没有

配置

相关问题