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

資訊專欄INFORMATION COLUMN

JS面向?qū)ο缶幊?-過程式分析

why_rookie / 2725人閱讀

摘要:開扒但是,沒有類的概念,是構(gòu)造函數(shù)和原型鏈的方式來體現(xiàn)的。福利原型鏈圖示網(wǎng)上找的,看懂即可跳過上述內(nèi)容該圖把原型和構(gòu)造函數(shù)間的關(guān)系理的很清楚,可在瀏覽器的運(yùn)行并查看對(duì)象下原型間的關(guān)系。

聲明:

概念性介紹會(huì)簡單穿插,以過程式分析問題為主,便于提高實(shí)踐的意義。

前言:

面向?qū)ο螅缫褷€熟于耳,以java為最,php5.6之后更是擴(kuò)展了面向?qū)ο笫介_發(fā)(起先引入對(duì)象概念,沒當(dāng)個(gè)大方向,這下無心插柳柳成蔭,繁盛起來了),js也基于對(duì)象式開發(fā)了。。。

開扒

但是,JS沒有類的概念,是構(gòu)造函數(shù)和原型鏈的方式來體現(xiàn)的。

我這里僅通過1個(gè)例子(有點(diǎn)懶~),盡量全面的分析下實(shí)現(xiàn)過程。

   /*=================定義“類”=================*/
   /*=======父類Foo=======*/
   function Foo(name,age){
     this.name = name;    //this是當(dāng)前 [調(diào)用FOO()構(gòu)造函數(shù)的] 對(duì)象,如果有子類Bar繼承則代表子類對(duì)象
     this.age = age;      //this.參數(shù)名,則意味著各個(gè)對(duì)象,有屬于自己的名字和年齡
    }                     //如上,是對(duì)象間差異化、獨(dú)立性的體現(xiàn)
    
    /*父類Foo的原型*/
    Foo.prototype = {         //在此定義Foo對(duì)象公有的方法/屬性,以節(jié)省內(nèi)存、便于維護(hù)(性能上:如果把sayHi()方法定義在了Foo(name,age)構(gòu)造函數(shù)中,等于說每new一個(gè)Foo或子類對(duì)象,每個(gè)對(duì)象在堆內(nèi)存就會(huì)多占點(diǎn)空間來存放sayHi()方法,耗內(nèi)存啊。)   
        sayHi:function(){     //公有方法  
            alert("Hi,I"m "+this.name);
        },
        guess:888             //公有屬性
    };
    
    /*=======子類Bar=======*/
    function Bar(name,age,sex){    
        Foo.call(this,name,age); //等同于Foo.apply(this,[name,age]);你要初始化的東東,父類搞好了,只管調(diào)用
        this.sex = sex;          //Bar對(duì)象本身的特有屬性
    }  
    /*子類Bar的原型是個(gè)Foo對(duì)象*/
    Bar.prototype = new Foo();   //Bar的原型類=Foo對(duì)象,意味著Bar對(duì)象能調(diào)到本身沒有卻在(Foo對(duì)象或者Foo.prototype)中存在的屬性或方法
    
    //創(chuàng)建并調(diào)用
    var bar = new Bar("Lin",18,"male"); 
    bar.sayHi();
     

運(yùn)行效果:

案例補(bǔ)充說明:

    
    1)var bar = new Bar("Lin",18,"male"); 
    解釋:
        new 一個(gè) Bar對(duì)象,名為bar.
        bar就繼承了Foo類的屬性和Foo原型上的方法。
        
    2)bar.sayHi();    //可調(diào)
    解釋:
        bar對(duì)象,首先自身查找是否有sayHi()方法,沒有則bar.__proto__得到Bar.prototype;
        在Bar.prototype這個(gè)原型對(duì)象中繼續(xù)查找,而前面我們已指定Bar.prototype = new Foo();
        則意味著是在Foo對(duì)象中查找,然而Foo對(duì)象本身沒有sayHi()方法;
        則調(diào)用(new Foo()).__proto__得到原型對(duì)象Foo.prototype;
        繼續(xù)在該原型對(duì)象Foo.prototype中查找sayHi()方法;
        終于找到了!??!返回結(jié)果吧。
    
    擴(kuò)展:
       如果依然沒找到,就會(huì)Foo.prototype.__proto__得到Object.prototype,
       Object.prototype本身沒有sayHi()方法,就會(huì)
       Object.prototype.__proto__得到null.
       null是最頂級(jí)的對(duì)象。在該對(duì)象中,查無此方法,就報(bào)錯(cuò)了;查無此屬性,就undefined.
   
 

涉及術(shù)語:

原型鏈
    各構(gòu)造函數(shù),各有與之相對(duì)應(yīng)的原型;
    類之間的繼承,就暗暗的把原型間的關(guān)系統(tǒng)籌在了一起。
    頂層原型上方法或?qū)傩缘牟檎疫^程,就是依靠著原型間的這種關(guān)系,一層一層的向上查找的。

原型繼承
     Bar.prototype = new Foo(); 

借用繼承
     Foo.call(this,name,age); //Foo.apply(this,[name,age]);

組合繼承
     function Bar(name,age,sex){    
        Foo.call(this,name,age);
        this.sex = sex;                
     }  
    Bar.prototype = new Foo();  

    現(xiàn)象式總結(jié):        
        僅是原型繼承,子類Bar確實(shí)可調(diào)用(父類Foo的屬性和原型上的方法)了,但實(shí)例化出來的Bar對(duì)象就不獨(dú)立了。意味著某個(gè)對(duì)象對(duì)Foo構(gòu)造函數(shù)中的屬性或方法的修改,會(huì)影響到其他對(duì)象調(diào)用的結(jié)果.
        簡言之,子類可調(diào)父類了,但是實(shí)例化的對(duì)象不獨(dú)立。

        僅是借用繼承,子類bar實(shí)例化的對(duì)象是獨(dú)立的,對(duì)象間不受影響,但父類原型上的方法調(diào)不了了.
   
        推薦組合繼承,既保證了對(duì)象間的獨(dú)立性,又能調(diào)用到父類的原型上的方法。



福利:

1.原型鏈圖示(網(wǎng)上找的,看懂即可跳過上述內(nèi)容)


該圖把原型和構(gòu)造函數(shù)間的關(guān)系理的很清楚,可在Google瀏覽器的console運(yùn)行demo并查看對(duì)象下原型間的關(guān)系。

2.JS高級(jí)部分,之前看的是ali的Bosn的JavaScript深入淺出

如有不適內(nèi)容,歡迎指正。

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

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

相關(guān)文章

  • <<深入PHP面向對(duì)象、模式與實(shí)踐>>讀書筆記:面向對(duì)象設(shè)計(jì)和程式編程

    摘要:注本文內(nèi)容來深入面向?qū)ο竽J脚c實(shí)踐中節(jié)。面向?qū)ο笤O(shè)計(jì)與過程式編程面向?qū)ο笤O(shè)計(jì)和過程式編程有什么不同呢可能有些人認(rèn)為最大的不同在于面向?qū)ο缶幊讨邪瑢?duì)象。面向?qū)ο缶幊毯瓦^程式編程的一個(gè)核心區(qū)別是如何分配職責(zé)。 注:本文內(nèi)容來中6.2節(jié)。 6.2 面向?qū)ο笤O(shè)計(jì)與過程式編程 ??面向?qū)ο笤O(shè)計(jì)和過程式編程有什么不同呢?可能有些人認(rèn)為最大的不同在于面向?qū)ο缶幊讨邪瑢?duì)象。事實(shí)上,這種說法不準(zhǔn)確。...

    xiao7cn 評(píng)論0 收藏0
  • 編程范式與函數(shù)式編程

    摘要:聲明式編程一種編程范式,與命令式編程相對(duì)立。常見的聲明式編程語言有數(shù)據(jù)庫查詢語言,正則表達(dá)式邏輯編程函數(shù)式編程組態(tài)管理系統(tǒng)等。函數(shù)式編程,特別是純函數(shù)式編程,嘗試最小化狀態(tài)帶來的副作用,因此被認(rèn)為是聲明式的。 編程范式與函數(shù)式編程 一、編程范式的分類 常見的編程范式有:函數(shù)式編程、程序編程、面向?qū)ο缶幊獭⒅噶钍骄幊痰?。在面向?qū)ο缶幊痰氖澜纾绦蚴且幌盗邢嗷プ饔茫ǚ椒ǎ┑膶?duì)象(Class...

    noONE 評(píng)論0 收藏0
  • 初探面向對(duì)象編程之oop與設(shè)計(jì)模式

    摘要:為什么要采用面向?qū)ο缶幊探鉀Q問題更容易設(shè)計(jì)計(jì)算機(jī)程序就是為了解決人類的問題。面向?qū)ο缶幊绦枰獙?duì)業(yè)務(wù)及代碼的架構(gòu)是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過程式編程 面向?qū)ο缶幊? 在講面向?qū)ο缶幊虝r(shí)先講一下什么是順序編程,什么是過程式編程,什么是面向?qū)ο缶幊蹋? 順序編程: 就是只用一個(gè)單線程去執(zhí)行一段代碼,執(zhí)行過程根據(jù)代碼依次從上...

    BingqiChen 評(píng)論0 收藏0
  • 編程模型(范式)小結(jié)

    摘要:參考鏈接面向?qū)ο缶幊棠P同F(xiàn)在的很多編程語言基本都具有面向?qū)ο蟮乃枷?,比如等等,而面向?qū)ο蟮闹饕枷雽?duì)象,類,繼承,封裝,多態(tài)比較容易理解,這里就不多多描述了。 前言 在我們的日常日發(fā)和學(xué)習(xí)生活中會(huì)常常遇到一些名詞,比如 命令式編程模型,聲明式編程模型,xxx語言是面向?qū)ο蟮牡鹊?,這個(gè)編程模型到處可見,但是始終搞不清是什么?什么語言又是什么編程模型,當(dāng)你新接觸一門語言的時(shí)候,有些問題是需...

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

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

0條評(píng)論

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