摘要:每個(gè)函數(shù)都有一個(gè)屬性構(gòu)造函數(shù)指向?qū)嵗腿缦聢D重點(diǎn)理解實(shí)例對(duì)象指向?qū)嵗蛯?duì)象參考原博客的那個(gè)部分挖來下圖理解之后我們來看在聲明函數(shù)的時(shí)候有一種聲明方法是構(gòu)造函數(shù)下面參考阮一峰第三種聲明函數(shù)的方式是構(gòu)造函數(shù)。
理解關(guān)于Function的原型鏈問題
關(guān)于Function的原型鏈問題的一些個(gè)人粗略理解,歡迎指正錯(cuò)誤的地方
可以看這篇文章:https://github.com/KieSun/Blo...
要理解Function的原型鏈的問題
首先深入理解__proto__
__proto__的含義是 實(shí)例對(duì)象指向?qū)嵗?/strong>!!
實(shí)例的原型對(duì)象就是構(gòu)造函數(shù).prototype
例如
function Person() { } var person = new Person(); console.log(person.__proto__ === Person.prototype); // true
所以:
每一個(gè)JavaScript對(duì)象(除了 null )都具有的一個(gè)屬性,叫__proto__,這個(gè)屬性會(huì)指向該對(duì)象的原型(對(duì)象)。
每個(gè)函數(shù)都有一個(gè) prototype 屬性,構(gòu)造函數(shù)指向?qū)嵗?如下圖
重點(diǎn)理解: 實(shí)例對(duì)象.__proto__指向?qū)嵗蛯?duì)象
參考原博客__proto__的那個(gè)部分
挖來下圖
理解之后我們來看 Function
1
在聲明函數(shù)的時(shí)候
有一種聲明方法是Function 構(gòu)造函數(shù)
下面參考阮一峰
第三種聲明函數(shù)的方式是Function構(gòu)造函數(shù)。
var add = new Function( "x", "y", "return x + y" ); // 等同于 function add(x, y) { return x + y; }
也就是說Function是一個(gè)構(gòu)造函數(shù),用來生成函數(shù)的構(gòu)造函數(shù).那么,String(),Boolean(),Number()這些函數(shù)都是Function構(gòu)造出來的,new出來的,也就是說String(),Boolean(),Number()這些函數(shù)(函數(shù)也是廣義對(duì)象)是Function的實(shí)例對(duì)象.那么 實(shí)例對(duì)象.__proto__指向?qū)嵗蛯?duì)象
也就是說
String.__proto__===Function.prototype//true Number.__proto__===Function.prototype//true Boolean.__proto__===Function.prototype//true Object.__proto__ === Function.prototype//true
不只是上述構(gòu)造函數(shù),實(shí)際上,
任意函數(shù)的__proto__都===Function.prototype
即
所有函數(shù).__proto__===Function.Prototype
因?yàn)槿我夂瘮?shù)都是Function() new(構(gòu)造)出來的.
任意函數(shù)都是Function()構(gòu)造函數(shù)的實(shí)例
關(guān)于Function 最奇特 的是
Function.__proto__===Function.Prototype//true
因?yàn)?所有函數(shù)實(shí)例.__proto__就是Function構(gòu)造函數(shù)的原型(Function.Prototype),函數(shù)而函數(shù)實(shí)例也包括他自己.
深入理解:
Function作為一個(gè)函數(shù)對(duì)象實(shí)例,他有__proto__,指向原型
Function又作為一個(gè)構(gòu)造函數(shù),他有自己的protoype,指向原型
所以
而
Function.__proto__===Object.Protoype//false
也就是說
更深層次的理解:
Function優(yōu)先是一個(gè)函數(shù)實(shí)例
自身是構(gòu)造函數(shù),自身又是自身構(gòu)造函數(shù)的實(shí)例
其次才是廣義的對(duì)象.
2
Function也可以看作是String()或者Boolean()或Number()同等地位
因?yàn)?b>所有函數(shù).prototype雖然是實(shí)例原型,但是實(shí)例原型本質(zhì)還是一個(gè)對(duì)象,也就是說所有的實(shí)例原型對(duì)象是Object()構(gòu)造函數(shù)的實(shí)例,即
String.prototype.__proto__=== Object.prototype//true Number.prototype.__proto__=== Object.prototype//true Boolean.prototype.__proto__=== Object.prototype//true //同理 Function.prototype.__proto__=== Object.prototype//true
Function總結(jié):
如果把函數(shù)看成對(duì)象,那么函數(shù).__proto__ === Function.prototype
如果把 Function 看成對(duì)象,那么 Function.__proto__ === Function.prototype
最終總結(jié)實(shí)例對(duì)象.__proto__===構(gòu)造函數(shù).prototype
其中實(shí)例對(duì)象是構(gòu)造函數(shù)構(gòu)造的實(shí)例.
原型鏈:
每層的__proto__都指向上一層的原型,所以一層一層的__proto__組成的鏈就成為原型鏈.
最終
Object.prototype.__proto__ //null
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94833.html
這是 最近在學(xué)習(xí)js繼承時(shí)看了多篇文章以及自我總結(jié)的學(xué)習(xí)筆記。 目錄:一:原型鏈二:構(gòu)造函數(shù)三:原型鏈和構(gòu)造函數(shù)組合繼承四:原型式五:寄生式六:寄生組合式 1、原型鏈 function Super(){ this.name = lily; this.age = 21; this.arr = [1,2,3] } function Sub(){} Sub.prototype = new S...
摘要:因?yàn)檫@造成了繼承鏈的紊亂,因?yàn)榈膶?shí)例是由構(gòu)造函數(shù)創(chuàng)建的,現(xiàn)在其屬性卻指向了為了避免這一現(xiàn)象,就必須在替換對(duì)象之后,為新的對(duì)象加上屬性,使其指向原來的構(gòu)造函數(shù)。這個(gè)函數(shù)接收兩個(gè)參數(shù)子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。 最近一直在研究js面向?qū)ο?,原型鏈繼承是一個(gè)難點(diǎn),下面是我對(duì)繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)...
摘要:前言作為前端高頻面試題之一,相信很多小伙伴都有遇到過這個(gè)問題。 前言 作為前端高頻面試題之一,相信很多小伙伴都有遇到過這個(gè)問題。那么你是否清楚完整的了解它呢? 國際慣例,讓我們先拋出問題: 什么是原型、原型鏈 它們有什么特點(diǎn) 它們能做什么 怎么確定它們的關(guān)系 或許你已經(jīng)有答案,或許你開始有點(diǎn)疑惑,無論是 get 新技能或是簡單的溫習(xí)一次,讓我們一起去探究一番吧 如果文章中有出現(xiàn)紕...
摘要:第一種方式是使用操作符,只要檢測的實(shí)例對(duì)象中的原型鏈包含出現(xiàn)過的構(gòu)造函數(shù),結(jié)果就會(huì)返回。而這也正是組合使用原型模式和構(gòu)造函數(shù)模式的原因。在構(gòu)造函數(shù)模式中定義屬性,在原型模式中定義共享的方法。 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《Ja...
摘要:每一個(gè)由構(gòu)造函數(shù)創(chuàng)建的對(duì)象都會(huì)默認(rèn)的連接到該神秘對(duì)象上。在構(gòu)造方法中也具有類似的功能,因此也稱其為類實(shí)例與對(duì)象實(shí)例一般是指某一個(gè)構(gòu)造函數(shù)創(chuàng)建出來的對(duì)象,我們稱為構(gòu)造函數(shù)的實(shí)例實(shí)例就是對(duì)象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問題 一些相關(guān)概念 認(rèn)識(shí)原型 構(gòu)造、原型、實(shí)例三角結(jié)構(gòu)圖 對(duì)象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話說明什么...
閱讀 1480·2021-11-16 11:44
閱讀 3298·2021-09-29 09:43
閱讀 630·2019-08-30 10:52
閱讀 951·2019-08-29 11:01
閱讀 3265·2019-08-26 11:47
閱讀 2899·2019-08-23 12:18
閱讀 1372·2019-08-22 17:04
閱讀 2056·2019-08-21 17:04