js 的function為什么可以添加屬性


(1)
function person(){
    this.name = 'Tom';
}
(2)
function person(){}
person.name = 'Tom';
(3)
function person(){}
person.prototype.name = 'Tom'

1是公有屬性
2是靜態屬性
3是原型共享屬性

解釋1: 

因為 JS 里, 函數也是對象, 是 Function 的實例。

function person(){ this.name = 'Tom'; }

這時候一般把 person 當作構造函數。

const demo = new person()

name 屬性是掛在 new 生成對象, 也就是 demo 上的。
ps: 當然, 你也可以不用 new 調用 person。但是可能會發生不可預知的后果。


function person(){} person.name = 'Tom';

這是在函數對象上直接定義了 name 屬性。


function person(){} person.prototype.name = 'Tom'

每個函數都會有一個 prototype 的屬性(箭頭函數除外)。 name 是放到原型屬性上。
每個用 new 調用生成的對象,都可以訪問到它們構造函數原型上的 name 屬性。

解釋2:

因為Js里面函數也是對象。

函數其實也有另一個寫法就是

a = new Function("return 1");

圖片描述

函數也是new出來的,所以函數其實也是一個對象。所以對象可以添加屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM