为什么name属性与我设置的值不同?

时间:2016-07-16 09:56:03

标签: javascript

我是JavaScript新手。有人可以解释为什么我在访问name函数的person属性时会出现意外值吗?

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

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

person.name = "hello";

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

5 个答案:

答案 0 :(得分:4)

函数有一个“name”属性,默认为函数本身的erm,<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <title>t</title> </head> <body> <div class="a"> <div class="g">g</div> <div class="f">f1</div> <div class="f">f2</div> <div class="b"> <div class="ba">ba</div> <div class="bb">bb</div> </div> <div class="c">c1</div> <div class="c">c2</div> <div class="c">c3</div> <div class="e">e1</div> <div class="e">e2</div> <div class="d">d</div> </div> ... </body> </html> 。它可以访问但不能写入,因此忽略了对<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 的分配。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/name

答案 1 :(得分:1)

Function.name是为函数定义的不可写且不可枚举的属性。所以即使你

&#13;
&#13;
person.name = "hello";
&#13;
&#13;
&#13;

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

答案 2 :(得分:1)

如果您选中name property descriptor,您会发现它不可写:

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

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

console.log(descriptor);
&#13;
&#13;
&#13;

正如您所看到的那样"writable": false,这意味着您无法更改该功能的name

答案 3 :(得分:1)

在JavaScript中,您可以定义只读(name)属性。因此,IEnumerable<string> Labels属性就是其中之一。更进一步,您可以查看此链接。

Defining read-only properties in JavaScript

Define Property

答案 4 :(得分:1)

检查defineProperty doc

可以通过赋值运算符

定义一个不可枚举且不可写的属性
  

<强>可写

     

当且仅当与属性关联的值可能为true时才为true   通过赋值运算符更改。

  

枚举

     

当且仅当在枚举期间显示此属性时才显示   对应对象的属性。

namefunction对象的一个​​此类属性。

  

可写

     

可数

     

可配置