js 的function為什麼可以新增屬性

2022-08-13 05:45:15 字數 955 閱讀 6607

(1)

function person()

(2)function person(){}

person.name = 'tom';

(3)function person(){}

person.prototype.name = 'tom'

1是公有屬性

2是靜態屬性

3是原型共享屬性

解釋1: 

因為 js 裡, 函式也是物件, 是 function 的例項。

function person()

這時候一般把 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出來的,所以函式其實也是乙個物件。所以物件可以新增屬性。

JS 語言的Function 解析

1.最基本的作為乙個本本分分的函式宣告使用。複製 如下 function func 或 var func function 2.作為乙個類構造器使用 複製 如下 function class class.prototype var item new class 3.作為閉包使用 複製 如下 func...

js 中的Function型別

函式的建立有兩種方式 二者基本等價,除了 什麼時候可通過變數訪問函式的區別,以下將舉例證明。以函式宣告的方式來建立,那麼不論在什麼時候訪問函式,都是正確的,因為解析器有函式宣告提公升。sayhello function sayhello 以函式表示式方式來建立,那麼只能在建立之後才能訪問。sayhe...

JS中 function 的理解

這種寫法,是一種立即執行函式的寫法,即iife等設計模式。這種函式在函式定義的地方就直接執行了。理解iife設計模式的關鍵是要認識到,在es6之前,j ascript僅具有函式作用域 因此缺少塊作用域 並通過 閉包內部的引用傳遞值。es6之後情況已不再如此,因為j ascript的es6版本使用le...