国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        js學習中的總結——幾種繼承模式

        2018-6-29    seo達人

        如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

             js中構造函數的幾種繼承模式淺析

        一、原型鏈模式繼承

            利用原型讓一個引用類型繼承另一個引用類型的屬性和方法 。

            用的最多。

            缺點:不可傳參,不可多繼承。

        
                
        1. function People(name, age) {//添加公有屬性
        2. name = name || 'xiaolan';
        3. age = age || 18;
        4. this.name = name;
        5. this.age = age;
        6. }//創建一個名為People的類
        7. People.prototype.eat = function() {//添加私有屬性
        8. console.log(this.name + '賊能吃');
        9. }
        10. function Cat(color) {//創建一個名為Cat的類
        11. this.color = color;
        12. }
        13. Cat.prototype = new People('小叮當', 200);//實例化一個People類,并賦值給Cat類的原型鏈
        14. var cat = new Cat('藍白色')
        15. console.log(cat.name)//'小叮當'
        16. cat.eat();//'小叮當賊能吃'

        二、混合模式繼承

            用call的方法只能繼承私有屬性,所以再加一遍一遍原型鏈模式繼承,原型鏈模式繼承又把私有屬性和公有屬性都繼承了一遍。

        
                
        1. function People(name, age) { //創建一個父級People類
        2. name = name || 'xiaolan';
        3. age = age || 18;
        4. this.name = name;
        5. this.age = age;
        6. }
        7. People.prototype.eat = function() {
        8. console.log(this.name + '賊能吃');
        9. }
        10. function Cat(color, name, age) {
        11. this.color = color;
        12. People.call(this, name, age); //通過call的形式繼承
        13. //通過call(this),將People的指向改為Cat的實例
        14. }
        15. var cat = new Cat('藍白色', '小叮當', 1);
        16. console.log(cat.name);//'小叮當'
        17. cat.eat();//報錯,
        18. //繼承不了公有屬性,所以cat.eat()會報錯;

        為了繼承公有屬性,用原型鏈模式在把公有屬性和方法繼承過來,

        
                
        1. function People(name, age) { //創建一個父級People類
        2. name = name || 'xiaolan';
        3. age = age || 18;
        4. this.name = name;
        5. this.age = age;
        6. }
        7. People.prototype.eat = function() {
        8. console.log(this.name + '賊能吃');
        9. }
        10. function Cat(color, name, age) {
        11. this.color = color;
        12. People.call(this, name, age); //通過call的形式繼承
        13. //通過call(this),將People的指向改為Cat的實例
        14. }
        15. Cat.prototype = new People()
        16. var cat = new Cat('藍白色', '小叮當', 200)
        17. console.log(cat)
        18. console.log(cat.name); //'小叮當',在原型鏈繼承的時候,就近原則,cat.name 先找到'小叮當',就不往下找了
        19. cat.eat(); //'小叮當賊能吃'

        三、拷貝繼承

            優點:可以多繼承,可傳參;

            缺點:浪費資源,不能判斷父級;

        
                
        1. function People(name, age) { //創建一個父級People類
        2. name = name || 'xiaolan';
        3. age = age || 18;
        4. this.name = name;
        5. this.age = age;
        6. }
        7. People.prototype.eat = function() {
        8. console.log(this.name + '賊能吃');
        9. }
        10. function Cat(color, name, age) {
        11. this.color = color;
        12. var people = new People(name, age) //實例化一個People類
        13. for (let i in people) {
        14. this[i] = people[i]; //將people中的可枚舉屬性和方法遍歷并附給Cat類,公有屬性和私有屬性都是可枚舉屬性;
        15. }
        16. }
        17. var cat = new Cat('藍白色', '小叮當', 2);
        18. console.log(cat.name); //小叮當
        19. cat.eat(); //小叮當賊能吃

        四、寄生組合方式繼承

            優點:私有屬性和公有屬性都單獨繼承,可以傳參;

            私有屬性可以多繼承,公有屬性不可多繼承;

        
                
        1. function People(name, age) {
        2. name = name || 'xiaolan';
        3. age = age || 18;
        4. this.name = name;
        5. this.age = age;
        6. }
        7. People.prototype.eat = function() {
        8. console.log(this.name + '賊能吃');
        9. }
        10. function Cat(color, name, age) {
        11. this.color = color;
        12. People.call(this, name, age) //用call的形式把私有屬性繼承過來
        13. }
        14. function Fn() {} //創建一個中間構造函數,用來接收People的公有屬性,為了防止創建實例Cat實例是影響原來的people構造函數
        15. Fn.prototype = People.prototype;
        16. Cat.prototype = new Fn(); //將中間構造函數Fn繼承people的公有屬性傳給Cat的原型鏈
        17. Cat.prototype.constructor = Cat; //由于上一步重置了Cat原型鏈的constructor屬性,所以要重新給賦回來;
        18. var cat = new Cat('藍白色', '小叮當', 3);
        19. console.log(cat.name); //'小叮當'
        20. cat.eat() //'小叮當賊能吃


        注:若有不嚴謹與錯誤的地方,請多指教!






        1. 這里寫圖片描述



        藍藍設計m.shtzxx.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務


        日歷

        鏈接

        個人資料

        藍藍設計的小編 http://m.shtzxx.cn

        存檔

        主站蜘蛛池模板: 国产露脸150部国语对白| 厨房人妻hd中文字幕| 色噜噜狠狠成人中文综合| 精品国产一区二区三区免费| 久久久老熟女一区二区三区| 瑞安市| 久久久精品日本一区二区三区| 小罗莉极品一线天在线| 精品国产免费第一区二区三区| 麻豆精产国品一二三产区| 欧洲美熟女乱又伦av| 又爽又黄又无遮挡网站| 理论电影在线观看| 美丽的熟妇中文字幕| 泰来县| 欧美国产日韩久久mv| 中国人妻与老外黑人| 国产成人综合久久久久久 | aa片在线观看视频在线播放 | 老鸭窝在线视频| 国产无套乱子伦精彩是白视频| 花房姑娘日本片免费观看 | 亚洲av永久无码精品表情包| 无遮挡啪啪摇乳动态图gif| 伊人久久大香线蕉av五月天| 激情人妻绿帽王八系列| 99香蕉国产精品偷在线观看| 平陆县| 精品国产一区二区三区不卡| aaa片欧美| 亚洲日韩色在线影院性色| 国产日产欧产系列| 国内精品久久久久久久小说| 免费国产麻豆传| 一二三四在线观看高清中文| 国产日韩成人内射视频| 小姑娘免费观看视频完整版| 成人性生交大片免费| 欧美a级片一区二区三区| 欧美黑人又粗又硬xxxxx喷水| 亚洲男人第一av天堂|