建構函式的一些理解

2022-06-22 13:09:11 字數 1411 閱讀 3794

首先寫乙個 person 的建構函式 如下:

person 建構函式中的 this 指向new出來的物件例項,也就是 p1,  通過new person(『實參1』,『實參2』) 將實參傳入 person建構函式中,建立出新的物件p1 。

prototype 原型:  在person 的原型上新增 say 方法, 通過在原型上新增方法後, 所有new person(『實參1』,『實參2』)出來的例項物件,都可以使用say方法,例如 下圖的 p1.say(『zzh』)。

有人可能會問, 為什麼要要在prototype原型上新增方法? 直接在person中寫乙個方法不行嗎?  咱們可以來試驗一下

通過測試,可以發現,直接在建構函式中通過this.say=function(){}也可以實現一樣的效果, 新new 出來的p1 也有say方法,通過p1.say('zzh')也可以成功輸出 my name is zzh  。既然可以直接在建構函式中實現繼承功能,為什麼還要使用原型?

上圖是 通過原型 和 直接在建構函式中寫方法的對比, 可以看出say方法的位置不同, 通過原型實現的方法,是放在原型鏈上的, new出來的例項,是通過原型鏈來使用方法的, 假如new一萬個新的例項,那麼,這一萬個例項都可以通過原型鏈來使用 原型上的方法。 而直接在建構函式中寫方法,new一萬個例項就相當於建立一萬次say方法,,,浪費記憶體,也沒有必要。。。。。。。所以原型prototype還是很有用的。

es6 中的class 寫法, 看起來會更加舒適,使用其來更加方便,如下圖,實習的效果是一樣的。 下邊的寫法就相當於 建立了乙個person的建構函式,也是通過new來建立例項。

construcor中放的是 例項屬性, 直接在class中寫方法 就等於 === 在prototype上新增方法

class 繼承    

person 是父元件, zguoren 是子元件。 通過 extend 繼承

super() 代表呼叫父元件中的constructor(){},      如果 super(引數)中有引數,將傳遞給父元件中的constructor(){} 函式

子元件中的 constructor(){}函式 用來接收 子元件new 出來的例項的傳參

關於c 建構函式的一些淺理解

建構函式是物件在被建立的時候,由編譯器自動呼叫並且分配記憶體空間的函式 不管你寫不寫它都會有 作用是初始化物件的成員。1 預設建構函式 語法 類名 每乙個類都自帶乙個預設建構函式,函式內為空,如果你寫了預設建構函式,則執行時編譯器將會呼叫你寫的預設建構函式。2 有參建構函式 語法 類名 引數1,引數...

C 構造 析構的一些理解

wiki c 類 effective c 構造 析構 賦值運算子 構造 析構 賦值運算子 c 類四個預設函式 建構函式 析構函式 拷貝函式 賦值函式 建構函式 析構函式 拷貝函式 賦值函式 c 多個建構函式的問題 概要 在c 中,每乙個類都會有乙個或多個建構函式,乙個析構函式,乙個賦值函式。建構函式...

php一些常用函式的理解

mysql result res,row,field 0 是獲取查詢結果集中的某乙個單元的內容.其中,row是行偏移,field是列偏移,或者叫索引,都是從0開始的.因為都是用的單數,所以是根據結果集中 的行 列偏移,來確定返回哪乙個單元格的內容.is int測試引數是否是整數 is numeric...