建構函式與原型物件

2021-10-24 17:34:21 字數 2729 閱讀 7389

建構函式本身就是乙個函式,只不過該函式是出於建立新物件的目的而建立的。建構函式與其他函式的唯一區別,就在於呼叫他們的方式不同。任何函式,只要通過new操作符來呼叫,那他就可以作為建構函式;而任何函式,如果不通過new操作符來呼叫,那它跟普通函式也沒有什麼兩樣。

// 當做構造函式呼叫

let person1 =

newperson

("wang",45

,"doctor");

person.

sayname()

;//wang

// 作為普通函式呼叫

person

("pan",23

,"student");

//新增到window

window.

sayname()

;//pan

像object 和 array屬於原生建構函式,也可以建立自定義的建構函式,從而定義自定義物件型別的屬性和方法。

自定義建構函式:

function

person

(name,age,job)

}let person1 =

newperson

("pan",23

,"student");

let person2 =

newperson

("wang",45

,"doctor"

);

要建立person的例項,要使用new操作符。以new操作符呼叫person的過程:

1.在記憶體中新建立乙個物件。

2.這個新物件內部的[[prototype]]特性被賦值為建構函式的prototype屬性.

3.建構函式內部的this被賦值為這個新物件(即this指向新物件)。

4.執行建構函式內部**(給新物件新增屬性)。

5.如果建構函式返回非空物件,則返回該物件;否則,返回剛建立的新物件。

按照慣例,建構函式始終都應該以乙個大寫字母開頭,而非建構函式則應該以乙個小寫字母開頭。

使用建構函式的主要問題,就是每個方法都要在每個例項上都建立一遍。

這個問題可以通過將函式定義放到建構函式外部解決。

function

person()

//將sayname方法放在建構函式外面,就不會出現每個例項上都建立一遍的問題了。

//可以通過console.log(person1.sayname===person2.sayname);驗證

function

sayname()

let person1 =

newperson

('pan');

let person2 =

newperson

('wang');

person1.

sayname()

;person2.

sayname()

;

我們建立的每個函式都有乙個prototype (原型)屬性,這個屬性是乙個指標,指向乙個物件,而這個物件的用途是包含可以由所有例項共享的屬性和方法。原型物件的理解:

無論什麼時候,只要建立乙個新函式,就會根據一組特定的規則為該函式建立乙個prototype屬性,這個屬性指向函式的原型物件。在預設情況下,所有原型物件都會自動獲得乙個constructor(建構函式)屬性,這個屬性是乙個指向prototype屬性所在函式的指標。

可以理解為建構函式通過prototype指向原型物件,原型物件通過constructor指向建構函式。原型物件中儲存著屬性可以被所有例項共享。

function

person()

person.prototype.name =

"pan"

;person.prototype.

sayname

=function()

;/**例項1

*通過[[prototype]]指向原型物件中的屬性和方法

*/var person1 =

newperson()

;person1.

sayname()

;//pan

/**例項2

*通過[[prototype]]指向原型物件中的屬性和方法

*/var person2 =

newperson()

;person2.

sayname()

;//pan

和person2.sayname都指向的原型物件中的sayname方法.

console.

log(person1.sayname === person2.sayname)

;//true

person建構函式、原型屬性與兩個例項之間的關係:

person1和person2都包含乙個內部屬性,該屬性只是指向了建構函式的屬性person.prototype,它們與建構函式並沒有直接關係。建構函式和原型物件有直接關係。

建構函式與原型物件

1.建構函式中的屬性和方法我們稱為成員,成員可以新增 2.例項成員 建構函式內部通過this新增的成員 uname,age,sing 就是例項成員 例項成員只能通過例項化的物件來訪問 3.靜態成員 在建構函式本身上新增的成員 靜態成員只能通過建構函式來訪問 建構函式的問題 建構函式方法很好用,但是存...

建構函式,原型物件,

概念 如果函式中的邏輯生成乙個物件的並將其返回,我們就將其稱之為建構函式 回顧,普通函式,如下圖 一 建構函式嚴格意義就是用來生物件的 示例 用普通函式模擬的建構函式 二 建構函式是必須通過new這個關鍵字呼叫的 要改變this的指向 也稱為 例項化乙個物件 執行這個函式,生成乙個物件 它的作用就是...

建構函式 原型物件

物件都會有乙個屬性 proto 指向建構函式的prototype原型物件,之所以我們物件可以使用建構函式prototype原型物件的屬性和方法,就是因為物件有 proto 原型的存在 body p 建構函式 原型物件 p p 雖然構造物件上沒有sing方法,但是原型物件上有,因為 proto 的存在...