成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

做個(gè)JS面向?qū)ο蟮墓P記

GitCafe / 2908人閱讀

摘要:組合構(gòu)造原型模式將自身屬性于構(gòu)造函數(shù)中定義,公用的方法綁定至原型對象上原型對象的解釋每一個(gè)函數(shù)創(chuàng)建時(shí)本身內(nèi)部會有一個(gè)固有的原型對象,可以通過函數(shù)名去訪問,而其原型對象又有一個(gè)屬性指針指向該函數(shù)。

每次遇到JS面對對象這個(gè)概念,關(guān)于繼承及原型,腦海里大概有個(gè)知識框架,但是很不系統(tǒng)化,復(fù)習(xí)下,將其系統(tǒng)化,內(nèi)容涉及到對象的創(chuàng)建,原型鏈,以及繼承。

創(chuàng)建對象

兩種常用方式,其余的比較少見
工廠模式:

    function createObject(){
        var o = {}
        o.name = "Nico"
        o.age = 8
        o.sayName = function(){
            alert(this.name)
        }
        return o
    }

這種方式比較不開門見山,比較直接的事第二種,構(gòu)造函數(shù)方式

    function Object(name, age){
        this.name = name
        this.age = age
        this.sayName = function(){
            alert(this.name)
        }
    }

通常使用第二種,比較直觀
考慮到函數(shù)也是對象的一種,每次對象的實(shí)例化中其方法也會跟隨著實(shí)例化一次,為了解決這個(gè)問題,因此出現(xiàn)了組合構(gòu)造原型模式,這是最常用的一種方式。

組合構(gòu)造原型模式

     function Object(name, age){
        this.name = name
        this.age = age
    }
    
    Object.prototype.sayName = function(){
        alert(this.name)
    }

將自身屬性于構(gòu)造函數(shù)中定義,公用的方法綁定至原型對象上

原型對象的解釋
每一個(gè)函數(shù)創(chuàng)建時(shí)本身內(nèi)部會有一個(gè)固有的原型對象,可以通過 函數(shù)名.prototype 去訪問,而其原型對象又有一個(gè)屬性constructor指針指向該函數(shù)。
假設(shè)有一個(gè)構(gòu)造函數(shù)

   function Person(){
        this.name = "Nicholas"
        this.age = 29
        this.job = "Software Engineer"
    }
    
    Person.prototype.sayName = function(){
        alert(this.name)
    }
    var person1 = new Person()
    var person12 = new Person()

其原型對象、構(gòu)造函數(shù)、實(shí)例之間的關(guān)系如下

構(gòu)造函數(shù)可以通過Person.prototype來訪問原型對象,但是實(shí)例是沒有辦法來訪問原型對象的,但是在Firefox、Chrome、Safari的每一個(gè)實(shí)例對象都有一個(gè)_proto_的屬性進(jìn)行訪問其原型

繼承

原型鏈:
根據(jù)以上的原型關(guān)系可以發(fā)現(xiàn),實(shí)例先從自身定義的屬性及方法中取值,若無法尋找到,則向上一級即原型對象訪問需要的屬性及方法,若其原型對象是另一個(gè)對象的實(shí)例,仍無法訪問到屬性與方法的話,再繼續(xù)向該實(shí)例的原型對象訪問,這樣就構(gòu)成了一個(gè)原型鏈,也是繼承的實(shí)現(xiàn)方式。

有如下兩個(gè)對象

    function SuperType(){
            this.property = true
        }

        SuperType.prototype.getSuperValue = function(){
            return this.property
        }

        function SubType(){
            this.subproperty = false
        }

        SubType.prototype = new SuperType()

        SubType.prototype.getSubValue = function(){
            return this.subproperty
        }

        var instance = new SubType()

        alert(instance.getSubValue()) // false
  

這是一個(gè)簡單的繼承實(shí)現(xiàn)方式,子類SubType具有了父類的property屬性,同時(shí)也具有g(shù)etSubValue的方法。
其原型鏈如下:

但是這樣做會將父類的屬性綁定至子類的原型上,如果父類具有按引用訪問的數(shù)據(jù)時(shí),子類的某一個(gè)實(shí)例中該數(shù)據(jù)的變化會導(dǎo)致所有子類實(shí)例該數(shù)據(jù)的變化,因此改進(jìn)為借用構(gòu)造函數(shù)模式的繼承

        function SubType(){
            SuperType.call(this)
            this.subproperty = false
        }

這樣就解決了該問題,將property屬性定義在了子類構(gòu)造函數(shù)上,子類實(shí)例訪問時(shí)先從該本身構(gòu)造函數(shù)具有的屬性中進(jìn)行訪問,且進(jìn)行操作,相當(dāng)于覆蓋了原型上的該同名屬性。

但是上述的方法又出現(xiàn)了一個(gè)別的問題,該問題也比較容易解決,比較少用到,筆記先到這,后續(xù)筆記將記錄該問題及解決辦法

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/89957.html

相關(guān)文章

  • 回顧自己三次失敗面試經(jīng)歷

    摘要:站在這個(gè)時(shí)間點(diǎn)上,我對自己之前三次失敗的面試經(jīng)歷做了一次深度回顧。關(guān)于我第三次面試失敗的經(jīng)歷,依然是與輪播圖有關(guān)。當(dāng)然,這次思特奇面試之旅,最后也是以失敗告終,這也是我離進(jìn)大廠最近的一次。 showImg(https://segmentfault.com/img/bVYQuP?w=528&h=513); 前言 時(shí)間的齒輪已經(jīng)來到了2017年的11月份,距離2018年僅僅還剩下不到兩...

    DC_er 評論0 收藏0
  • 回顧自己三次失敗面試經(jīng)歷

    摘要:站在這個(gè)時(shí)間點(diǎn)上,我對自己之前三次失敗的面試經(jīng)歷做了一次深度回顧。關(guān)于我第三次面試失敗的經(jīng)歷,依然是與輪播圖有關(guān)。當(dāng)然,這次思特奇面試之旅,最后也是以失敗告終,這也是我離進(jìn)大廠最近的一次。 showImg(https://segmentfault.com/img/bVYQuP?w=528&h=513); 前言 時(shí)間的齒輪已經(jīng)來到了2017年的11月份,距離2018年僅僅還剩下不到兩...

    spacewander 評論0 收藏0
  • 筆記】JavaScript高級篇——面向對象、原型、繼承

    摘要:繼承傳統(tǒng)的面向?qū)ο笳Z言,繼承是類與類之間的關(guān)系。原型繼承原型定義原型就是指構(gòu)造函數(shù)的屬性所引用的對象。創(chuàng)建構(gòu)造函數(shù)創(chuàng)建的實(shí)例對象張三李四就是對象的原型也是的原型在原型上創(chuàng)建一個(gè)屬性運(yùn)行和,并對比是否為同一個(gè)方法。 原文鏈接:http://www.hansmkiii.com/2018/07/06/javascript-node-1/ 面向?qū)ο?、原型、繼承 1、面向?qū)ο?1.1 什么...

    OBKoro1 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<