2016-07-16 59 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對象的一個​​這樣的屬性。

可寫沒有

可枚舉沒有

配置

相關問題