摘要:重點(diǎn)實(shí)例對(duì)象是通過原型對(duì)象與構(gòu)造函數(shù)取得聯(lián)系的。原型鏈的形成是真正是靠的,而不是。函數(shù)對(duì)象和原型對(duì)象通過和屬性進(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/
先聊一聊對(duì)象的事情JavaScript 中,萬物皆對(duì)象!但對(duì)象也是有區(qū)別的,主要分為普通對(duì)象(Object)和函數(shù)對(duì)象(Function)。
說好的只聊技術(shù),怎么聊上個(gè)人問題了???
好了,安慰一下,請(qǐng)你吃下面 這道菜!
function example(){}; var example2 = function(){}; var example3 = new Function("str","console.log(str)"); var other = {}; var other2 =new Object(); var other3 = new example(); console.log(typeof other); //object 下面檢測(cè)一下他們都是些什么類型函數(shù) console.log(typeof other2); //object console.log(typeof other3); //object console.log(typeof example); //function console.log(typeof example2); //function console.log(typeof example3); //function
怎么區(qū)分普通對(duì)象和函數(shù)對(duì)象呢?!其實(shí)很簡(jiǎn)單,凡是通過 new Function() 創(chuàng)建的對(duì)象都是函數(shù)對(duì)象,其他的都是普通對(duì)象;所以 other、other2、other3 為普通對(duì)象,而 example、example2、example3 為函數(shù)對(duì)象。
在 JavaScript 中,每當(dāng)定義一個(gè)函數(shù)對(duì)象時(shí)候,對(duì)象中都會(huì)包含一些預(yù)定義的屬性(意思就是這個(gè)函數(shù)對(duì)象一旦被定義就必然會(huì)有這些屬性)。
其中函數(shù)對(duì)象的一個(gè)屬性就是原型對(duì)象 prototype;這個(gè)屬性會(huì)指向函數(shù)的原型對(duì)象。
默認(rèn)情況下每個(gè)原型對(duì)象又都會(huì)獲取一個(gè) constructor 屬性,這個(gè)屬性包含一個(gè)指向 prototype 屬性所在函數(shù)的指針。
來來來,了解完對(duì)象,我們?cè)撻_車上路了(老司機(jī)秒懂)
function Dogs(){ } Dogs.prototype.name = "Collie"; Dogs.prototype.age = 3; Dogs.prototype.DogsName = function(){ alert(this.name); }; var DogsA = new Dogs(); DogsA.DogsName();//"Collie"
上面的代碼中,創(chuàng)建了一個(gè) Dogs 函數(shù),這時(shí)候它就會(huì)擁有一個(gè) prototype 屬性,這個(gè)屬性指向了 Dogs Prototype 原型對(duì)象,而這個(gè)原型對(duì)象擁有一個(gè) constructor (構(gòu)造函數(shù)) 屬性,其指針指向了 Dogs,就是 prototype 屬性所在的函數(shù) Dogs;當(dāng)你創(chuàng)建一個(gè)對(duì)象實(shí)例( DogsA,就是這條語(yǔ)句:var DogsA = new Dogs(); )的時(shí)候,同樣會(huì)擁有一個(gè) prototype 屬性;這個(gè) prototype 屬性會(huì)指向其原型對(duì)象,而不是直接指向其構(gòu)造函數(shù) Dogs。
我們可以測(cè)試一下,以上面的代碼為例:
console.log(DogsA._proto_ === Dogs.prototype) //true
同樣,Dogs.prototype對(duì)象也有 _proto _ 屬性,它指向創(chuàng)建它的函數(shù)對(duì)象(Object)的 prototype
console.log(Dogs.prototype._proto_ === Object.prototype) //true
好了繼續(xù),Object.prototype對(duì)象也有 _proto _屬性,但它比較特殊,為 NULL
console.log(Object.prototype._proto_) //null
我們把這個(gè)有 proto 串起來,直到 Object.prototype.__proto_ _為 NULL 的鏈就叫做原型鏈。
總結(jié)原型和原型鏈?zhǔn)?JS 實(shí)現(xiàn)繼承的一種模型。
原型鏈的形成是真正是靠 _proto _ 的,而不是 prototype。
所有的原型對(duì)象都有 constructor 屬性,該屬性對(duì)應(yīng)創(chuàng)建所有指向該原型的實(shí)例構(gòu)造函數(shù)。
函數(shù)對(duì)象和原型對(duì)象通過 prototype 和 constructor 屬性進(jìn)行相互關(guān)聯(lián)。
該文章部分知識(shí)網(wǎng)絡(luò)整理文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86600.html
摘要:深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...
摘要:深入系列第十二篇,通過的模擬實(shí)現(xiàn),帶大家揭開使用獲得構(gòu)造函數(shù)實(shí)例的真相一句話介紹運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類型之一也許有點(diǎn)難懂,我們?cè)谀M之前,先看看實(shí)現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過new的模擬實(shí)現(xiàn),帶大家揭開使用new獲得構(gòu)造函數(shù)實(shí)例的真相 new 一句話介紹 new: new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具...
摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來說,通過詞法分析語(yǔ)法分析語(yǔ)法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。也就是說打著構(gòu)造函數(shù)的幌子掛羊頭賣狗肉,你看創(chuàng)建的實(shí)例使用都無法指向構(gòu)造函數(shù)這樣方法可以在特殊情況下使用。 JavaScript深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 寫在前面 這篇文章講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,因?yàn)椤禞avaScript高級(jí)程序設(shè)計(jì)》寫得真是太好了! 1....
摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過設(shè)置和獲取對(duì)象的原型對(duì)象對(duì)象之間的關(guān)系可以用下圖來表示但規(guī)范主要介紹了如何利用構(gòu)造函數(shù)去構(gòu)建原型關(guān)系。 前言 在軟件工程中,代碼重用的模式極為重要,因?yàn)樗麄兛梢燥@著地減少軟件開發(fā)的成本。在那些主流的基于類的語(yǔ)言(比如Java,C++)中都是通過繼承(extend)來實(shí)現(xiàn)代碼復(fù)用,同時(shí)類繼承引入了一套類型規(guī)范。而JavaScript是...
閱讀 2287·2021-11-23 09:51
閱讀 5682·2021-09-22 15:39
閱讀 3355·2021-09-02 15:15
閱讀 3506·2019-08-30 15:54
閱讀 2364·2019-08-30 15:53
閱讀 1405·2019-08-30 14:04
閱讀 2459·2019-08-29 18:33
閱讀 2378·2019-08-29 13:08