原型和原型鏈基礎

2021-10-03 19:20:36 字數 3126 閱讀 5336

如何準確判斷乙個變數是不是陣列?

a instanceof array

手寫乙個簡易jquery,考慮外掛程式和擴充套件性

class

jquery

this

.length = length

this

.selector = selector

}get(index)

each

(fn)}on

(type, fn))}

// 擴充套件很多 dom api

}// 外掛程式

jquery.prototype.

dialog

=function

(info)

// 「造輪子」

class

myjquery

extends

jquery

// 擴充套件自己的方法

addclass

(classname)

style

(data)

}// const $p = new jquery('p')

// $p.get(1)

// $p.each((elem) => console.log(elem.nodename))

// $p.on('click', () => alert('clicked'))

class的原型本質,怎麼理解?

原型和原型鏈的圖示

屬性和方法的執行規則

// 類

class

student

sayhi()

,學號 $`

)// console.log(

//普通寫法

// '姓名 ' + this.name + ' ,學號 ' + this.number

// )

}// study()

}// 通過類 new 物件/例項

const xialuo =

newstudent

('夏洛'

,100

)console.

log(xialuo.name)

console.

log(xialuo.number)

xialuo.

sayhi()

const madongmei =

newstudent

('馬冬梅'

,101

)console.

log(madongmei.name)

console.

log(madongmei.number)

madongmei.

sayhi

()

extends

super

擴充套件或重寫方法

// 父類

class

people

eat(

)eat something`)}

}// 子類

class

student

extends

people

sayhi()

學號 $`)

}}// 子類

class

teacher

extends

people

teach()

教授 $`)

}}// 例項

const xialuo =

newstudent

('夏洛'

,100

)console.

log(xialuo.name)

console.

log(xialuo.number)

xialuo.

sayhi()

//類似 xialuo.__prototype__.sayhi.call(xialuo)

xialuo.

eat(

)// 例項

const wanglaoshi =

newteacher

('王老師'

,'語文'

)console.

log(wanglaoshi.name)

console.

log(wanglaoshi.major)

wanglaoshi.

teach()

wanglaoshi.

eat(

)

[

]instanceof

array

//true

instanceof

object

//true

instanceof

object

//true

object可以認為是所有class的父類

//class實際上是函式,可見是語法糖

typeof people //'function'

typeof student //'function'

//隱式原型和顯示原型

console.

log(xialuo.__proto__)

console.

log(student.prototype)

console.

log(xialuo.__proto__ === student.prototype)

//true

每個class都有顯示原型prototype

每個例項都有__proto__指向對應 class 的 prototype

獲取屬性xialuo.name 或執行方法 xialuo.sayhi() 時

先在自身屬性和方法尋找

如果找不到則自動去__proto__中查詢

一層一層的。

class 是 es6 語法規範,由ecma 委員會發布

ecma 只規定語法規則,即我們**的書寫規範,不規定如何實現

以上實現方式都是 v8引擎的實現方式,也是主流的。

js基礎 原型和原型鏈

原型是js中的乙個重要知識點,之前一直都原型一知半解,最近在做js的基礎梳理,感覺很有必要做一下關於原型和原型鏈的總結。一 普通物件和函式物件 了解原型,所有我們需要知道js中變數歸根到底是啥,可能大家都聽說過 萬物皆物件。但物件也會有一定區分,存在 普通物件 和 函式物件,區分規則 通過 new ...

原型 和 原型鏈

每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...

原型和原型鏈

原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...