當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
JS原型概念讲解
1.對(duì)象中存儲(chǔ)屬性的區(qū)域?qū)嶋H有兩個(gè)
- 對(duì)象自身
--比如直接通過(guò)對(duì)象所添加的屬性--在類中通過(guò)x = y 的形式添加的屬性,位于對(duì)象自身中- 原型中存儲(chǔ)
--對(duì)象中還有一些內(nèi)容,會(huì)存儲(chǔ)到其他對(duì)象中(原型對(duì)象)--在對(duì)象中會(huì)有一個(gè)屬性用來(lái)存儲(chǔ)原型對(duì)象,這個(gè)屬性叫做__proto__--原型對(duì)象也負(fù)責(zé)為對(duì)象存儲(chǔ)屬性當(dāng)我們?cè)L問(wèn)對(duì)象中的屬性時(shí),會(huì)優(yōu)先訪問(wèn)對(duì)象自身的屬性對(duì)象自身不包含該屬性時(shí),才會(huì)去原型對(duì)象中尋找 --會(huì)添加到原型對(duì)象中的情況:1.在類中通過(guò)xxx() {} 方式添加的方法,位于原型中2.主動(dòng)向原型中添加的屬性或方法例子:
class Person {name = "孫悟空"age = 18sayHello() {console.log("我是", this.name)}}const per = new Person()console.log(per)按道理,應(yīng)該輸入一個(gè)包含sayHello的對(duì)象,但是實(shí)際上
sayHello方法并不是在age和name一層級(jí),而是在Prototype中。
這就是一個(gè)叫做原型的地方存儲(chǔ)著。
2.如何訪問(wèn)一個(gè)對(duì)象的原型呢?兩種方式
class Person {name = "孫悟空"age = 18sayHello() {console.log("我是", this.name)}}const per = new Person()console.log(per)console.log(per.__proto__)console.log(Object.getPrototypeOf(per))3.原型對(duì)象中的數(shù)據(jù):
-
1.對(duì)象中的數(shù)據(jù)(屬性、方法等)
-
2.constructor (對(duì)象的構(gòu)造方法)
注意:
原型對(duì)象也有原型,這樣就構(gòu)成了一條原型鏈,根據(jù)對(duì)象的復(fù)雜程度不同,原型鏈的長(zhǎng)度也不同,比如
可以看出構(gòu)成了原型鏈。
總結(jié):
原型鏈:
讀取對(duì)象屬性時(shí),會(huì)優(yōu)先對(duì)象自身屬性,
如果對(duì)象中有,則使用,沒(méi)有則去對(duì)象的原型中尋找
如果原型中有,則使用,沒(méi)有則去原型的原型中尋找
知道找到Object對(duì)象的原型,Object的原型沒(méi)有原型(為null)
原型的作用:
原型就相當(dāng)于一個(gè)公共的區(qū)域,可以被所有該類實(shí)例訪問(wèn),
可以將一個(gè)該類實(shí)例中,所有的公共屬性(方法)統(tǒng)一存儲(chǔ)到原型中
這樣我們只需要?jiǎng)?chuàng)建一個(gè)屬性,即可被所有實(shí)例訪問(wèn)
JS中繼承就是通過(guò)原型來(lái)實(shí)現(xiàn)的,
當(dāng)繼承時(shí),子類的原型就是一個(gè)父類的實(shí)例
總結(jié)
- 上一篇: 干货 | 支持10X增长,携程机票订单库
- 下一篇: GAN 对抗生成网络代码实现