亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

原型鏈二:Function的原型鏈問題

dingda / 1417人閱讀

摘要:每個(gè)函數(shù)都有一個(gè)屬性構(gòu)造函數(shù)指向?qū)嵗腿缦聢D重點(diǎn)理解實(shí)例對象指向?qū)嵗蛯ο髤⒖荚┛偷哪莻€(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í)例對象指向?qū)嵗?/strong>!!

實(shí)例的原型對象就是構(gòu)造函數(shù).prototype
例如

function Person() {

}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true

所以:

每一個(gè)JavaScript對象(除了 null )都具有的一個(gè)屬性,叫__proto__,這個(gè)屬性會(huì)指向該對象的原型(對象)。

每個(gè)函數(shù)都有一個(gè) prototype 屬性,構(gòu)造函數(shù)指向?qū)嵗?如下圖

重點(diǎn)理解: 實(shí)例對象.__proto__指向?qū)嵗蛯ο?/b>
參考原博客__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ù)也是廣義對象)是Function實(shí)例對象.那么 實(shí)例對象.__proto__指向?qū)嵗蛯ο?/b>
也就是說

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ù)對象實(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í)例

其次才是廣義的對象.

2
Function也可以看作是String()或者Boolean()Number()同等地位

因?yàn)?b>所有函數(shù).prototype雖然是實(shí)例原型,但是實(shí)例原型本質(zhì)還是一個(gè)對象,也就是說所有的實(shí)例原型對象是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ù)看成對象,那么函數(shù).__proto__ === Function.prototype

如果把 Function 看成對象,那么 Function.__proto__ === Function.prototype

最終總結(jié)
實(shí)例對象.__proto__===構(gòu)造函數(shù).prototype

其中實(shí)例對象是構(gòu)造函數(shù)構(gòu)造的實(shí)例.

原型鏈:
每層的__proto__都指向上一層的原型,所以一層一層的__proto__組成的鏈就成為原型鏈.

最終

Object.prototype.__proto__
//null

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/94833.html

相關(guān)文章

  • JavaScript繼承六種方式

    這是 最近在學(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...

    wujl596 評論0 收藏0
  • JavaScript面向?qū)ο?--原型繼承

    摘要:因?yàn)檫@造成了繼承鏈的紊亂,因?yàn)榈膶?shí)例是由構(gòu)造函數(shù)創(chuàng)建的,現(xiàn)在其屬性卻指向了為了避免這一現(xiàn)象,就必須在替換對象之后,為新的對象加上屬性,使其指向原來的構(gòu)造函數(shù)。這個(gè)函數(shù)接收兩個(gè)參數(shù)子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。 最近一直在研究js面向?qū)ο?,原型鏈繼承是一個(gè)難點(diǎn),下面是我對繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)...

    vspiders 評論0 收藏0
  • JavaScript中原型原型

    摘要:前言作為前端高頻面試題之一,相信很多小伙伴都有遇到過這個(gè)問題。 前言 作為前端高頻面試題之一,相信很多小伙伴都有遇到過這個(gè)問題。那么你是否清楚完整的了解它呢? 國際慣例,讓我們先拋出問題: 什么是原型、原型鏈 它們有什么特點(diǎn) 它們能做什么 怎么確定它們的關(guān)系 或許你已經(jīng)有答案,或許你開始有點(diǎn)疑惑,無論是 get 新技能或是簡單的溫習(xí)一次,讓我們一起去探究一番吧 如果文章中有出現(xiàn)紕...

    laoLiueizo 評論0 收藏0
  • JS面向?qū)ο?em>的程序設(shè)計(jì)之繼承實(shí)現(xiàn) - 原型注意點(diǎn)

    摘要:第一種方式是使用操作符,只要檢測的實(shí)例對象中的原型鏈包含出現(xiàn)過的構(gòu)造函數(shù),結(jié)果就會(huì)返回。而這也正是組合使用原型模式和構(gòu)造函數(shù)模式的原因。在構(gòu)造函數(shù)模式中定義屬性,在原型模式中定義共享的方法。 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《Ja...

    pf_miles 評論0 收藏0
  • 進(jìn)擊JavaScript之(四)原型原型

    摘要:每一個(gè)由構(gòu)造函數(shù)創(chuàng)建的對象都會(huì)默認(rèn)的連接到該神秘對象上。在構(gòu)造方法中也具有類似的功能,因此也稱其為類實(shí)例與對象實(shí)例一般是指某一個(gè)構(gòu)造函數(shù)創(chuàng)建出來的對象,我們稱為構(gòu)造函數(shù)的實(shí)例實(shí)例就是對象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問題 一些相關(guān)概念 認(rèn)識(shí)原型 構(gòu)造、原型、實(shí)例三角結(jié)構(gòu)圖 對象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話說明什么...

    XBaron 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<