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