摘要:之前在學(xué)習(xí)原型繼承的時(shí)候,在網(wǎng)上搜了一堆,發(fā)現(xiàn)都不是我想要的結(jié)果,就想起來我之前在一本書上看到的原型繼承方法。書名忍者秘籍第二版,作者原型繼承需要兩步第一步是把子類的原型設(shè)置為父類的實(shí)例。
之前在學(xué)習(xí)“JavaScript 原型繼承”的時(shí)候,在網(wǎng)上搜了一堆,發(fā)現(xiàn)都不是我想要的結(jié)果,就想起來我之前在一本書上看到的原型繼承方法。(書名:《JavaScript 忍者秘籍(第二版)》,作者:John Resig, Bear Bibeault, Josip Maras)
原型繼承需要兩步:
第一步是把子類的原型設(shè)置為父類的實(shí)例。但是這樣一來子類實(shí)例的 constructor 就指向父類了,所以需要手動修復(fù)一下子類的 constructor。
于是就有了第二步:通過 Object.defineProperty 方法來把子類的 constructor 修正為子類。
以下是根據(jù)書中內(nèi)容自己寫的:
function Person() {} function Ninja() {} Ninja.prototype = new Person() Object.defineProperty(Ninja.prototype, "constructor", { enumerable: false, value: Ninja, writable: true }) let ninja = new Ninja()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104802.html
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級,而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級,而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個(gè)問題,在面試中,很多同學(xué)經(jīng)常都會遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...
摘要:在創(chuàng)建對象不論是普通對象還是函數(shù)對象的時(shí)候,都有一個(gè)叫做的內(nèi)置屬性,用于指向創(chuàng)建它的構(gòu)造函數(shù)的原型對象,也就是。因?yàn)橐粋€(gè)普通對象的構(gòu)造函數(shù)所以原型鏈原型鏈的形成是真正是靠而非。參考文章最詳盡的原型與原型鏈終極詳解,沒有可能是。 【前端芝士樹】Javascript的原型、原型鏈以及繼承機(jī)制 前端的面試中經(jīng)常會遇到這個(gè)問題,自己也是一直似懂非懂,趁這個(gè)機(jī)會整理一下 0. 為什么會出現(xiàn)原型和...
摘要:重點(diǎn)實(shí)例對象是通過原型對象與構(gòu)造函數(shù)取得聯(lián)系的。原型鏈的形成是真正是靠的,而不是。函數(shù)對象和原型對象通過和屬性進(jìn)行相互關(guān)聯(lián)。 JavaScript 使用 prototypal 原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。 個(gè)人博客排版更佳:https://haonancx.github.io/ showImg(https://se...
摘要:每個(gè)原型都有一個(gè)屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)由于實(shí)例對象可以繼承原型對象的屬性,所以實(shí)例對象也擁有屬性,同樣指向原型對象對應(yīng)的構(gòu)造函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000017183104?w=1300&h=834); 構(gòu)造函數(shù):function Foo ( ) { }; 實(shí)例對象:let f1=new Foo; 談到...
閱讀 948·2021-11-22 12:09
閱讀 3715·2021-09-27 13:36
閱讀 1404·2021-08-20 09:37
閱讀 4027·2019-12-27 12:22
閱讀 2365·2019-08-30 15:55
閱讀 2370·2019-08-30 13:16
閱讀 2832·2019-08-26 17:06
閱讀 3442·2019-08-23 18:32