摘要:在講原型之前,先簡單介紹一下幾個概念構造函數(shù)例如上述代碼創(chuàng)建的函數(shù)就被稱為構造函數(shù)。同一個構造函數(shù)實例化得到的多個對象具有相同的原型對象,所以經(jīng)常使用原型對象來實現(xiàn)繼承。實例對象通過操作構造函數(shù)所創(chuàng)建的對象是實例對象。
對于很多前端開發(fā)者而言,JavaScript的原型實在是很讓人頭疼,所以我這邊就整理了一下自己對應原型的一點理解,分享給大家,供交流使用
原型說起原型,那就不得不說prototype、__proto__、constructor三者的關系,其中比較麻煩的就是容易將prototype和__proto__混淆,這也是因為它們之間的指向確實有些復雜
function Heternally(){}; var f1 = new Heternally;
通過上述兩行代碼先創(chuàng)建一個函數(shù)對象,然后使用new實例化對象。
在講原型之前,先簡單介紹一下幾個概念:
構造函數(shù)
例如上述代碼創(chuàng)建的Heternally()函數(shù)就被稱為構造函數(shù)。是用來初始化新創(chuàng)建的對象的函數(shù)。
構造函數(shù)有一個prototype屬性,它指向實例對象的原型對象。同一個構造函數(shù)實例化得到的多個對象具有相同的原型對象,所以經(jīng)常使用原型對象來實現(xiàn)繼承。
實例對象
通過new操作構造函數(shù)所創(chuàng)建的對象是實例對象。一個構造函數(shù)可以實例化多個實例對象,但是得到的各個實例對象并不相等。
實例對象有個proto屬性,指向該實例對象對應的原型對象。
又因為實例對象可以繼承原型對象的屬性,所以實例對象也擁有constructor屬性,指向原型對象對應的構造函數(shù)
原型對象
原型對象有一個constructor屬性,指向該原型對象對應的構造函數(shù)
prototype和__proto__的區(qū)別w3c上對于 prototype 屬性的定義是它使您有能力向對象添加屬性和方法
1. prototype是函數(shù)才有的屬性
2. __proto__是每個對象都有的屬性
3. __ptoto__實際上是某個實體對象的屬性,而prototype則是屬于構造函數(shù)的屬性。__ptoto__只能在學習或調試的環(huán)境下使用。
__proto__屬性指向誰它的指向取決于對象創(chuàng)建時的實現(xiàn)方式,這里就介紹兩種常用方式創(chuàng)建對象后,它指向誰
字面量方式
構造器方式
原型鏈由于__proto__是任何對象都有的屬性,而js中萬物皆對象,所以會形成一條__proto__連起來的鏈條,遞歸訪問__proto__必須最終到頭,并且值是null。
當js引擎查找對象的屬性時,先查找對象本身是否存在該屬性,如果不存在,會在原型鏈中查找,但不會查找自身的prototype
圖片取自原型鏈
總結所有的對象都有__proto__屬性,該屬性對應該對象的原型.
所有的函數(shù)對象都有prototype屬性,該屬性的值會被賦值給該函數(shù)創(chuàng)建的對象的_proto_屬性.
所有的原型對象都有constructor屬性,該屬性對應創(chuàng)建所有指向該原型的實例的構造函數(shù).
函數(shù)對象和原型對象通過prototype和constructor屬性進行相互關聯(lián).
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/51188.html
摘要:在講原型之前,先簡單介紹一下幾個概念構造函數(shù)例如上述代碼創(chuàng)建的函數(shù)就被稱為構造函數(shù)。同一個構造函數(shù)實例化得到的多個對象具有相同的原型對象,所以經(jīng)常使用原型對象來實現(xiàn)繼承。實例對象通過操作構造函數(shù)所創(chuàng)建的對象是實例對象。 對于很多前端開發(fā)者而言,JavaScript的原型實在是很讓人頭疼,所以我這邊就整理了一下自己對應原型的一點理解,分享給大家,供交流使用 原型 說起原型,那就不得不說p...
摘要:在這其中我們就逃不開要討論繼承原型對象構造函數(shù)實例了。想要獲得某一類型的構造函數(shù)可以用來獲得,也可以對該屬性進行賦值操作。三上面就提到一點是指構造函數(shù)的原型對象,它是一個對象,它是構造函數(shù)的屬性。 原型鏈這一個話題,需要和很多概念一起講,才能串成一個比較系統(tǒng)的知識點。在這其中我們就逃不開要討論繼承、原型對象、構造函數(shù)、實例了。 一、構造函數(shù) 構造函數(shù)是一類特殊的函數(shù),它的作用是用來生成...
摘要:在中,主要有兩種創(chuàng)建對象的方法分別是對象字面量以及調用構造函數(shù)對象字面量調用構造函數(shù)其實上述兩種創(chuàng)建對象的方法,本質上是一樣的,都是引擎調用對象的構造函數(shù)來新建出一個對象。 原型與原型鏈是javascript里面最最核心的內(nèi)容,如果不能理解它們之間的存在關系的話,那么我們是不能理解這門語言的。 在JS中,主要有兩種創(chuàng)建對象的方法, 分別是對象字面量以及調用構造函數(shù) //對象字面量 va...
摘要:數(shù)組的構造函數(shù)是原型鏈的指向與其他除以外的構造函數(shù)相同,的也指向頂級原型對象,每一個數(shù)組都是的實例,都指向。實例對象查找構造函數(shù)原型對象的方法一般會把對象共有的屬性和方法都放在構造函數(shù)的原型對象上。 showImg(https://segmentfault.com/img/remote/1460000018998704?w=900&h=506); 閱讀原文 概述 在 JavaScr...
閱讀 4013·2021-09-22 16:03
閱讀 5387·2021-09-22 15:40
閱讀 1224·2021-09-06 15:02
閱讀 896·2019-08-30 15:53
閱讀 2265·2019-08-29 15:35
閱讀 1131·2019-08-23 18:22
閱讀 3365·2019-08-23 16:06
閱讀 674·2019-08-23 12:27