在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ js 的function為什么可以添加屬性

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

今天在擼代碼的時(shí)候遇見(jiàn)個(gè)問(wèn)題。就是下面的寫法有什么區(qū)別?

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

這3種寫法有什么區(qū)別?尤其是第二種寫法為什么可以直接寫person.name。
person是函數(shù)。為什么可以像對(duì)象一樣添加屬性?
我應(yīng)該看什么資料惡補(bǔ)這方面的知識(shí)?
前端小白。各位大神指點(diǎn)下。萬(wàn)分感謝。

回答
編輯回答
檸檬藍(lán)

1是公有屬性
2是靜態(tài)屬性
3是原型共享屬性
不清楚的話請(qǐng)看《javascript設(shè)計(jì)模式》

2017年4月18日 02:48
編輯回答
心夠野

可看《javascript高級(jí)程序設(shè)計(jì)》繼承部分。

2018年5月29日 08:11
編輯回答
墨小白

因?yàn)?JS 里, 函數(shù)也是對(duì)象, 是 Function 的實(shí)例。

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

這時(shí)候一般把 person 當(dāng)作構(gòu)造函數(shù)。

const demo = new person()

name 屬性是掛在 new 生成對(duì)象, 也就是 demo 上的。
ps: 當(dāng)然, 你也可以不用 new 調(diào)用 person。但是可能會(huì)發(fā)生不可預(yù)知的后果。


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

這是在函數(shù)對(duì)象上直接定義了 name 屬性。


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

每個(gè)函數(shù)都會(huì)有一個(gè) prototype 的屬性(箭頭函數(shù)除外)。 name 是放到原型屬性上。
每個(gè)用 new 調(diào)用生成的對(duì)象,都可以訪問(wèn)到它們構(gòu)造函數(shù)原型上的 name 屬性。

2017年3月21日 16:20
編輯回答
替身

因?yàn)镴s里面函數(shù)也是對(duì)象。

函數(shù)其實(shí)也有另一個(gè)寫法就是

a = new Function("return 1");

圖片描述

函數(shù)也是new出來(lái)的,所以函數(shù)其實(shí)也是一個(gè)對(duì)象。所以對(duì)象可以添加屬性。

相關(guān)知識(shí)可以看一下,這一個(gè)系列看完應(yīng)該會(huì)有不小的收獲,還可以去關(guān)注一下new的實(shí)際操作。

深入理解javascript原型和閉包(2)——函數(shù)和對(duì)象的關(guān)系

2018年2月14日 20:06