成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

dingda / 1371人閱讀

摘要:每個(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

相關(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 評(píng)論0 收藏0
  • JavaScript面向?qū)ο?--原型繼承

    摘要:因?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)...

    vspiders 評(píng)論0 收藏0
  • JavaScript中原型原型

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

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

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

    摘要:每一個(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 一句話說明什么...

    XBaron 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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