理解函式 建構函式 原型與原型鏈四者之間的關係

2021-09-29 16:29:37 字數 2011 閱讀 2747

第一:如何理解函式、建構函式相同點和不同點?

建構函式就是乙個普通的函式,建立方式和普通函式沒有區別,不同的是建構函式習慣上首字母大寫。

建構函式和普通函式的區別就是呼叫方式的不同,普通函式是直接呼叫,而建構函式需要使用new關鍵字來呼叫。

例如:建立乙個person函式和person建構函式

//普通函式

function

person

(name , age ,gender)

;//將新的物件返回

return obj;

}//普通函式的呼叫

var obj =

person

("蜘蛛精",18

,"女");

console.

log(obj)

;//建構函式

function

person

(name , age , gender);}

// 建構函式的呼叫

var per =

newperson

("豬八戒",28

,"男");

console.

log(per)

;

通過普通函式建立的物件都是object的例項,通過建構函式建立的的物件是其自身的例項,但是所有物件都是object的後代。

例如:上面的例子在控制台輸出的結果看下圖

4. 當以函式的形式呼叫時,this是window,而當以建構函式的形式呼叫時,this就是新建立的那個物件。

//普通函式

functionfn(

)//普通函式的呼叫

var obj =fn(

)//建構函式

function

function()

//建構函式的呼叫

var fn =

newfunction

()

第二:原型與原型鏈之間的關係

一、關於原型:

我們所建立的每乙個函式,解析器都會向函式中新增乙個屬性prototype,而prototype屬性指向乙個物件,也就是這個函式的原型物件,我們也可以稱之為原型。

如果函式作為普通函式呼叫prototype沒有任何作用,當函式以建構函式的形式呼叫時,它所建立的物件中都會有乙個隱含的屬性,指向該建構函式的原型物件,我們可以通過__proto__來訪問該屬性。

原型物件就相當於乙個公共的區域,所有同乙個類的例項都可以訪問到這個原型物件,我們可以將物件中共有的內容,統一設定到原型物件中。

二、關於原型鏈:

原型物件也是物件,所以它也有原型,當我們使用乙個物件的屬性或方法時,會現在自身中尋找,自身中如果有,則直接使用,如果沒有則去原型物件中尋找,如果原型物件中有,則使用,如果沒有則去原型的原型中尋找,這樣就形成乙個鏈式結構,我們稱之為原型鏈。

原型鏈最頂層是object物件的原型,object物件的原型沒有原型,如果使用乙個物件的屬性或方法時,原型鏈中沒有,一直找到object原型,在object原型中依然沒有找到,則返回undefined。

所謂原型鏈其實就是由原型物件的原型物件構成的乙個鏈式結構。

三、原型的作用:四、如何檢查物件中含有某乙個屬性

console.

log(

"屬性名"

in 物件名)

;

五、檢查乙個物件自身是否含有某乙個屬性

console.

log(物件名.

hasownproperty

("屬性名"))

;

三、函式、建構函式當中的原型物件

javascript原型和原型鏈,建構函式和例項

原型 建構函式 就是工廠,原型的例項就是工廠按照圖紙生成的工具 比如汽車 原型鏈 隱式的 就是生成的工具所具有的功能,而功能是工具的屬性,生成什麼樣的工具是由工廠 建構函式 決定的,圖紙是有工廠和客戶共同決定的 var ca ctory function options this.stop func...

js的原型 原型鏈 建構函式

js裡一切皆物件。有js自己內部的物件,還有使用者自定義的物件。所有的物件都是從原型上衍生出來的。原型本身也是物件,原型鏈的最高層就是object。兩個重要的屬性 prototype,proto 所有的物件都有 proto 屬性,通過.proto 一層一層,最後到達object,object的 pr...

js關於原型建構函式和原型鏈的理解

js的物件導向方式的函式有很多種方式,其中有兩個比較重要的是兩種方式一是建構函式模式,一是原型模式。1 建構函式模式如 function persion name,age var person1 new person alex 29 person1.sayname alex var person2 ...