摘要:本文詳情構(gòu)造函數(shù)創(chuàng)建對(duì)象先使用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象在這個(gè)例子中,就是一個(gè)構(gòu)造函數(shù),我們使用創(chuàng)建了一個(gè)實(shí)例對(duì)象。
本文詳情:https://github.com/mqyqingfen...
構(gòu)造函數(shù)創(chuàng)建對(duì)象
先使用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象
function Person(){ } var person = new Person(); person.name = "Mit"; console.log(person.name)
在這個(gè)例子中,Person 就是一個(gè)構(gòu)造函數(shù),我們使用 new 創(chuàng)建了一個(gè)實(shí)例對(duì)象 person。
prototype
每個(gè)函數(shù)都有一個(gè)prototype對(duì)象
function Person() { } // 雖然寫(xiě)在注釋里,但是你要注意: // prototype是函數(shù)才會(huì)有的屬性 Person.prototype.name = "Kevin"; var person1 = new Person(); var person2 = new Person(); console.log(person1.name) // Kevin console.log(person2.name) // Kevin
函數(shù)的prototype對(duì)象指向該構(gòu)造函數(shù)創(chuàng)建實(shí)例的原型
(__proto__)
每個(gè)js對(duì)象都具有一個(gè)屬性,叫__proto__,這個(gè)屬性指向該對(duì)象的原型
function Person() { } var person = new Person(); console.log(person.__proto__ === Person.prototype); // true
更新如下
constructor
每個(gè)原型都有一個(gè)constructor屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)
實(shí)例和原型
當(dāng)讀取完實(shí)例的屬性是,如果找不到,就會(huì)查找與對(duì)象關(guān)聯(lián)的原型中的屬性,如果找不到,就回去原型中去查找
function Person() { } Person.prototype.name = "Kevin"; var person = new Person(); person.name = "Daisy"; console.log(person.name) // Daisy delete person.name; console.log(person.name) // Kevin
原型的原型
在前面,我們已經(jīng)講了原型也是一個(gè)對(duì)象,既然是對(duì)象,我們就可以用最原始的方式創(chuàng)建它,那就是:
var obj = new Object(); obj.name = "Kevin" console.log(obj.name) // Kevin
其實(shí)原型對(duì)象就是通過(guò) Object 構(gòu)造函數(shù)生成的,結(jié)合之前所講,實(shí)例的 proto 指向構(gòu)造函數(shù)的 prototype ,所以我們?cè)俑孪玛P(guān)系圖:
原型鏈
那 Object.prototype 的原型呢?
null,我們可以打?。?/p>
console.log(Object.prototype.__proto__ === null) // true
然而 null 究竟代表了什么呢?
引用阮一峰老師的 《undefined與null的區(qū)別》 就是:
null 表示“沒(méi)有對(duì)象”,即該處不應(yīng)該有值。
所以 Object.prototype.__proto__ 的值為 null 跟 Object.prototype 沒(méi)有原型,其實(shí)表達(dá)了一個(gè)意思。
所以查找屬性的時(shí)候查到 Object.prototype 就可以停止查找了。
最后一張關(guān)系圖也可以更新為:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/108032.html
摘要:深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...
摘要:深入系列第十二篇,通過(guò)的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用獲得構(gòu)造函數(shù)實(shí)例的真相一句話介紹運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類(lèi)型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類(lèi)型之一也許有點(diǎn)難懂,我們?cè)谀M之前,先看看實(shí)現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過(guò)new的模擬實(shí)現(xiàn),帶大家揭開(kāi)使用new獲得構(gòu)造函數(shù)實(shí)例的真相 new 一句話介紹 new: new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類(lèi)型的實(shí)例或具...
摘要:也就是說(shuō)當(dāng)返回的函數(shù)作為構(gòu)造函數(shù)的時(shí)候,時(shí)指定的值會(huì)失效,但傳入的參數(shù)依然生效。構(gòu)造函數(shù)效果的優(yōu)化實(shí)現(xiàn)但是在這個(gè)寫(xiě)法中,我們直接將,我們直接修改的時(shí)候,也會(huì)直接修改函數(shù)的。 JavaScript深入系列第十一篇,通過(guò)bind函數(shù)的模擬實(shí)現(xiàn),帶大家真正了解bind的特性 bind 一句話介紹 bind: bind() 方法會(huì)創(chuàng)建一個(gè)新函數(shù)。當(dāng)這個(gè)新函數(shù)被調(diào)用時(shí),bind() 的第一個(gè)參數(shù)...
摘要:寫(xiě)在前面深入系列共計(jì)篇已經(jīng)正式完結(jié),這是一個(gè)旨在幫助大家,其實(shí)也是幫助自己捋順底層知識(shí)的系列。深入系列自月日發(fā)布第一篇文章,到月日發(fā)布最后一篇,感謝各位朋友的收藏點(diǎn)贊,鼓勵(lì)指正。 寫(xiě)在前面 JavaScript 深入系列共計(jì) 15 篇已經(jīng)正式完結(jié),這是一個(gè)旨在幫助大家,其實(shí)也是幫助自己捋順 JavaScript 底層知識(shí)的系列。重點(diǎn)講解了如原型、作用域、執(zhí)行上下文、變量對(duì)象、this、...
摘要:深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。優(yōu)點(diǎn)融合原型鏈繼承和構(gòu)造函數(shù)的優(yōu)點(diǎn),是中最常用的繼承模式。寄生組合式繼承為了方便大家閱讀,在這里重復(fù)一下組合繼承的代碼組合繼承最大的缺點(diǎn)是會(huì)調(diào)用兩次父構(gòu)造函數(shù)。 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫(xiě)在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎...
閱讀 2562·2021-09-22 15:25
閱讀 2973·2021-09-14 18:03
閱讀 1226·2021-09-09 09:33
閱讀 1708·2021-09-07 09:59
閱讀 2937·2021-07-29 13:50
閱讀 1505·2019-08-30 15:44
閱讀 1722·2019-08-29 16:22
閱讀 1293·2019-08-29 12:49