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

資訊專欄INFORMATION COLUMN

總結(jié)javascript基礎(chǔ)概念(三):js對象原型鏈

yzd / 1883人閱讀

摘要:執(zhí)行構(gòu)造函數(shù)的一步說明對象可以通過函數(shù)來創(chuàng)建。是最頂級的構(gòu)造函數(shù),對象里面,就有好幾個其他屬性。構(gòu)造函數(shù)與普通函數(shù)并沒有區(qū)別,只是調(diào)用方式不同。

主要問題:
1、構(gòu)造函數(shù)和普通函數(shù)有區(qū)別么?什么區(qū)別?
2、prototype和__proto__有什么不同?
3、instanceof的作用機制,為什么有限制?
4、ES6的相關(guān)方法,Class繼承原理?

三、對象與原型

(一)、數(shù)據(jù)類型
Js共有6種數(shù)據(jù)類型:

5種基本數(shù)據(jù)類型 undefined,null,string,number,Boolean
1種復雜數(shù)據(jù)類型 Object

Object 數(shù)據(jù)類型可以分為兩種:

函數(shù)(包括各種原生、自定義的構(gòu)造函數(shù)):
    Object(),Function(),Array(),Date(),,,
對象實例(由函數(shù)創(chuàng)建的) {,,},[,,]...

(二)、創(chuàng)建對象

很簡單的一段代碼,我們來看看這個new究竟做了什么?我們可以把new的過程拆分成以下三步:
<1> var p={}; 也就是說,初始化一個對象p。
<2> p.__proto__=Person.prototype;
<3> Person.call(p); 也就是說構(gòu)造p,也可以稱之為初始化p。//執(zhí)行構(gòu)造函數(shù)的一步

說明:對象可以通過函數(shù)來創(chuàng)建。對象都是通過函數(shù)創(chuàng)建的。

每個函數(shù)都有一個prototype屬性,指向一個對象,對象默認只有一個叫做constructor的屬性,指向這個函數(shù)本身。

Object是最頂級的構(gòu)造函數(shù),prototype對象里面,就有好幾個其他屬性。

每個對象都有一個__proto__,可成為隱式原型。

自定義函數(shù)的prototype本質(zhì)上就是普通對象實例,都是被Object創(chuàng)建,所以它的__proto__指向的就是Object.prototype。Object.prototype確實一個特例——它的__proto__指向的是null。

(三)、instanceof

Instanceof運算符的第一個變量是一個對象,暫時稱為A;第二個變量一般是一個函數(shù),暫時稱為B。
Instanceof的判斷隊則是:沿著A的__proto__這條線來找,同時沿著B的prototype這條線來找,如果兩條線能找到同一個引用,即同一個對象,那么就返回true。如果找到終點還未重合,則返回false。
所以instanceof 無法檢測不同iframe創(chuàng)建的對象實例。

(四)、ES6新方法,新特性
Object.setPrototypeOf(),Object.getPrototypeOf()。新增加幾個方法直接操作對象的__proto__屬性,實現(xiàn)對象之間的聯(lián)系。
Class的對象語法糖,模仿面向?qū)ο蟮恼Z法,勉強提供了JS中的類的概念。然而并沒有改變原型鏈的實質(zhì),只是更加隱藏的更深。

(五)、繼承與委托
與純凈面向?qū)ο蟮恼Z言不同,JS本質(zhì)并沒有類和實例的概念。JS中一切皆對象(除了少數(shù)基本類型),是真正的面向“對象”。
構(gòu)造函數(shù)與普通函數(shù)并沒有區(qū)別,只是調(diào)用方式不同。
與竭力模仿面向?qū)ο蟮姆绞絹硎褂肑S,使得代碼繼承邏輯十分復雜抽象。
相比之下,使用委托的思想,直接修改對象的__proto__屬性指向,來訪問委托對象上的屬性和方法,在邏輯上更簡潔直觀。

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

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

相關(guān)文章

  • JS程序

    摘要:設(shè)計模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計模式必須要先搞懂面向?qū)ο缶幊?,否則只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學習總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...

    melody_lql 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評論0 收藏0
  • JS前端面試總結(jié)

    摘要:春招季如何橫掃面試核心考點基礎(chǔ)版前端面試之路二基礎(chǔ)整理的繼承和的繼承有什么區(qū)別的繼承時通過或構(gòu)造函數(shù)機制來實現(xiàn)。作用創(chuàng)建私有變量,減少全局變量,防止變量名污染。異步瀏覽器訪問服務(wù)器請求,用戶正常操作,瀏覽器后端進行請求。 春招季如何橫掃 Javascript 面試核心考點(基礎(chǔ)版)?前端面試之路二(javaScript基礎(chǔ)整理) ES5的繼承和ES6的繼承有什么區(qū)別 ES5的繼承時通過...

    ThinkSNS 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<