摘要:該函數(shù)的實例的原型指向構(gòu)造函數(shù)的屬性判斷對象是否是構(gòu)造函數(shù)的實例函數(shù)對象和普通對象函數(shù)對象通過,得到的對象,有和兩個屬性普通對象通過非函數(shù)得的對象,有一個屬性總結(jié)凡是通過創(chuàng)建的對象都是函數(shù)對象,其他的都是普通對象。
基本概念:
在js中,一切皆對象
每個對象都有一個指向它的原型的的內(nèi)部鏈接(此鏈接還沒有規(guī)范的訪問方式,一般用__proro__代替),這個原型也有自己的原型,直到每個對象的原型為null為止
任意一個函數(shù)都可以作為構(gòu)造器即var someFun = new AnyFun()
每個函數(shù)都有一個prototype屬性,其它對象沒有,該屬性也是一個對象,該對象有一個constructor屬性指向該函數(shù)
使用new去實例化一個函數(shù)后,得到的是一個對象。該函數(shù)的實例的原型指向構(gòu)造函數(shù)的prototype屬性
API
1.instanceof,判斷對象是否是構(gòu)造函數(shù)的實例
2.getPrototypeOf()
函數(shù)對象和普通對象
函數(shù)對象:通過new Function(),得到的對象,有_proto_和prototype兩個屬性
普通對象:通過非Function()函數(shù)new得的對象,有_proto_一個屬性
總結(jié):凡是通過 new Function() 創(chuàng)建的對象都是函數(shù)對象,其他的都是普通對象。
面向?qū)ο笏枷雽憈ab切換
a.定義構(gòu)造函數(shù),并確定實例擁有的屬性 b.給原型添加行為,即方法 c.實例化對象
1.
面向?qū)ο骉ab切換 div1div2div3
2.
面向?qū)ο骉AB切換 123
3.
面向?qū)ο骉AB切換 123123
原型prototype、對象、構(gòu)造函數(shù)
對象:屬性跟方法的集合,屬性是靜態(tài)的數(shù)據(jù),方法即行為,操作數(shù)據(jù)
構(gòu)造函數(shù):在函數(shù)的前面出現(xiàn)new關鍵字,js內(nèi)置的構(gòu)造函數(shù),Date/Object/RegExp/String/Number/Boolean/Function
自定義構(gòu)造函數(shù):按照約定,首字母大寫,跟普通函數(shù)區(qū)分
調(diào)用: new Person() 返回實例對象
var o = new Object();
Object.prototype === o.__proto__
原型prototype、對象、構(gòu)造函數(shù)關系
對象是由構(gòu)造函數(shù)創(chuàng)建,實例化的,字面量賦值,語法糖
對象的屬性/方法的查找,a.先從自身查找,找到返回,b.找不到沿著原型鏈上查找,找到返回,找不到重復b步驟,直到頂級Object.prototype
構(gòu)造函數(shù)、原型、實例三者之間的關系
構(gòu)造函數(shù):函數(shù)調(diào)用前存在關鍵字new的
a.定義,為了跟普通函數(shù)區(qū)分,按照約定首字母大寫
b.調(diào)用時使用關鍵字new
c.返回值,創(chuàng)建出來的實例
d.內(nèi)部的this,指向創(chuàng)建出來的實例
函數(shù)定義,必存在prototype屬性,指向原型
原型:屬性跟方法的集合,也是一個對象[__proto__]
實例:通過構(gòu)造函數(shù)創(chuàng)建出來的對象必存在屬性__proto__,指向原型,對象屬性的查找,先從自身查找,找不到,沿著原型鏈從原型查找...
換句話說,對象的屬性跟方法從原型上繼承下來,對象的屬性、方法可以重寫
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102190.html
摘要:不理解沒關系,下面會結(jié)合圖例分析上一篇高級程序設計筆記創(chuàng)建對象下一篇高級程序設計筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對象與原型鏈繼承與原型鏈 文章直接從原型圖解開始的,如果對一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關系(重點) function Person() {}; var p = new Person(); showImg(https://s...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關系那么圖中所有的虛線將構(gòu)成一個繼承層級,而實線表示屬性引用。原型鏈是實現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個問題,在面試中,很多同學經(jīng)常都會遇到。這里給大家講講,方便大家記憶。 JavaScript的特點JavaScript是一門直譯式腳本...
摘要:之前有朋友問怎么去理解原型和原型鏈的問題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關系那么圖中所有的虛線將構(gòu)成一個繼承層級,而實線表示屬性引用。原型鏈是實現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問怎么去理解原型和原型鏈的問題。這個問題,在面試中,很多同學經(jīng)常都會遇到。這里給大家講講,方便大家記憶。 JavaScript的特點JavaScript是一門直譯式腳本...
摘要:探索是如何判斷的表達式如果函數(shù)的顯式原型對象在對象的隱式原型鏈上,返回,否則返回是通過自己產(chǎn)生的實例案例案例重要注意的顯示原型和隱式原型是一樣的。面試題測試題測試題報錯對照下圖理解 原型與原型鏈深入理解(圖解) 原型(prototype) 函數(shù)的 prototype 屬性(圖) 每個函數(shù)都有一個prototype屬性,它默認指向一個Object空對象(即稱為:原型對象) 原型對象中有...
摘要:原型鏈和對象的原型是對象實例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時候會創(chuàng)建一個新對象,自動將的原型指向構(gòu)造函數(shù)的對象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學者甚至有一定經(jīng)驗的老鳥都不一定能完全說清...
摘要:因為這造成了繼承鏈的紊亂,因為的實例是由構(gòu)造函數(shù)創(chuàng)建的,現(xiàn)在其屬性卻指向了為了避免這一現(xiàn)象,就必須在替換對象之后,為新的對象加上屬性,使其指向原來的構(gòu)造函數(shù)。這個函數(shù)接收兩個參數(shù)子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。 最近一直在研究js面向?qū)ο?,原型鏈繼承是一個難點,下面是我對繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實現(xiàn)...
閱讀 2868·2021-11-22 11:56
閱讀 3568·2021-11-15 11:39
閱讀 913·2021-09-24 09:48
閱讀 774·2021-08-17 10:14
閱讀 1340·2019-08-30 15:55
閱讀 2766·2019-08-30 15:55
閱讀 1325·2019-08-30 15:44
閱讀 2794·2019-08-30 10:59