摘要:組合繼承法把父對象方法掛載到父類的原型對象上去,實現(xiàn)方法復(fù)用原型的構(gòu)造函數(shù)指向程序員
原型繼承
function Person(name,sex){ this.name=name; this.sex=sex; this.friends = {lily:"female",lucy:"female"}; this.showFriends=function(){ var str = "" for(i in this.friends){ str+=i +" "+this.friends[i] +","; } console.log("my friends:"+str); } } Person.prototype.hello=function(){ console.log("hello:"+this.name); } var per1 = new Person("A","male"); per1.hello(); per1.showFriends(); function Student(className){ this.class = className; } Student.prototype = new Person("B","male");//原型繼承將子對象的原型對象指向父對象的實例 ; 缺點:不能由子對象像父對象傳遞參數(shù), var stu1 = new Student(1);//不能由子對象像父對象傳遞參數(shù), stu1.name="C"; stu1.hello(); stu1.friends.C = "male";//2、對于引用型的屬性修改之后會印象其他的實例對象; stu1.showFriends();//2、對于引用型的屬性修改之后會印象其他的實例對象; console.log("stu1 instanceof Student: "); console.log(stu1 instanceof Student); console.log("stu1 instanceof Person: "); console.log(stu1 instanceof Person); var stu2 = new Student(2); stu2.name="D"; stu2.hello(); stu2.showFriends();//2、對于引用型的屬性修改之后會印象其他的實例對象; console.log("stu2 instanceof Student: "); console.log(stu2 instanceof Student); console.log("stu2 instanceof Person: "); console.log(stu2 instanceof Person);
缺點:1、不能由子對象像父對象傳遞參數(shù),2、對于引用型的屬性修改之后會印象其他的實例對象;構(gòu)造函數(shù)繼承
//構(gòu)造函數(shù)繼承 function Teacher(name,sex,type){ this.type=type; Person.call(this,name,sex); } var tea1 = new Teacher("E","female","數(shù)學(xué)"); //tea1.hello(); //報錯沒有繼承到原型上的方法 tea1.friends.F = "male"; tea1.showFriends(); var tea2 = new Teacher("G","male","語文"); tea2.friends.H = "male"; tea2.showFriends(); console.log("tea2 instanceof Teacher: ") console.log(tea2 instanceof Teacher); console.log("tea2 instanceof Person: ") console.log(tea2 instanceof Person);
缺點:1、不能繼承父對象原型上的方法 2、每次實例化對象會重新構(gòu)建函數(shù),浪費內(nèi)存。組合繼承法
把父對象方法掛載到父類的原型對象上去,實現(xiàn)方法復(fù)用
function Worker(name,sex,job){ this.job = job; Person.call(this,name,sex) } Worker.prototype = new Person(); Worker.prototype.constructor = Worker;//原型的構(gòu)造函數(shù)指向worker var wor1 = new Worker("I","female","程序員"); wor1.hello(); wor1.friends.J = "male"; wor1.showFriends();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/102277.html
摘要:因為這造成了繼承鏈的紊亂,因為的實例是由構(gòu)造函數(shù)創(chuàng)建的,現(xiàn)在其屬性卻指向了為了避免這一現(xiàn)象,就必須在替換對象之后,為新的對象加上屬性,使其指向原來的構(gòu)造函數(shù)。這個函數(shù)接收兩個參數(shù)子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。 最近一直在研究js面向?qū)ο螅玩溊^承是一個難點,下面是我對繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實現(xiàn)...
摘要:創(chuàng)建自定義的構(gòu)造函數(shù)之后,其原型對象只會取得屬性,其他方法都是從繼承來的。優(yōu)缺點寄生式繼承在主要考慮對象而不是創(chuàng)建自定義類型和構(gòu)造函數(shù)時,是十分有用的。 原文鏈接:https://kongchenglc.coding.me... 1.原型鏈 ??js的繼承機制不同于傳統(tǒng)的面向?qū)ο笳Z言,采用原型鏈實現(xiàn)繼承,基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。理解原型鏈必須先理...
摘要:可以通過構(gòu)造函數(shù)和原型的方式模擬實現(xiàn)類的功能。原型式繼承與類式繼承類式繼承是在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型的構(gòu)造函數(shù)。寄生式繼承這種繼承方式是把原型式工廠模式結(jié)合起來,目的是為了封裝創(chuàng)建的過程。 js繼承的概念 js里常用的如下兩種繼承方式: 原型鏈繼承(對象間的繼承) 類式繼承(構(gòu)造函數(shù)間的繼承) 由于js不像java那樣是真正面向?qū)ο蟮恼Z言,js是基于對象的,它沒有類的概念。...
摘要:想要解決這樣的問題的話,可以借助構(gòu)造函數(shù)也可以叫做偽造對象或經(jīng)典繼承。這種方式實現(xiàn)非常簡單,就是在子對象的構(gòu)造函數(shù)中調(diào)用父對象的構(gòu)造函數(shù)。 原型式繼承 原型式繼承,就是一定一個函數(shù),該函數(shù)中創(chuàng)建一個臨時性的構(gòu)造函數(shù),將作為參數(shù),傳入的對象作為這個構(gòu)造函數(shù)的原型,最后返回這個構(gòu)造函數(shù)的實例對象 /*定義函數(shù):用于實現(xiàn)對象之間的繼承 參數(shù): obj:表示繼承關(guān)系中的父級對象...
摘要:綜上所述有原型鏈繼承,構(gòu)造函數(shù)繼承經(jīng)典繼承,組合繼承,寄生繼承,寄生組合繼承五種方法,寄生組合式繼承,集寄生式繼承和組合繼承的優(yōu)點于一身是實現(xiàn)基于類型繼承的最有效方法。 一、前言 繼承是面向?qū)ο螅∣OP)語言中的一個最為人津津樂道的概念。許多面對對象(OOP)語言都支持兩種繼承方式::接口繼承 和 實現(xiàn)繼承 。 接口繼承只繼承方法簽名,而實現(xiàn)繼承則繼承實際的方法。由于js中方法沒有簽名...
摘要:創(chuàng)建子類實例,可以向父類構(gòu)造函數(shù)傳參數(shù)。修復(fù)如下其實方式組合繼承優(yōu)化核心通過這種方式,砍掉父類的實例屬性,這樣在調(diào)用父類的構(gòu)造函數(shù)的時候,就不會初始化兩次實例,避免組合繼承的缺點。優(yōu)點只調(diào)用一次父類構(gòu)造函數(shù)。 2018.06.03 第一部分:導(dǎo)入 1、構(gòu)造函數(shù)的屬性 funcion A(name) { this.name = name; // 實例基本屬性 (該屬性,強調(diào)私有,...
閱讀 1008·2023-04-25 23:54
閱讀 3091·2021-11-08 13:21
閱讀 3881·2021-09-27 13:35
閱讀 3445·2021-07-26 23:41
閱讀 1094·2019-08-30 15:52
閱讀 3507·2019-08-30 11:27
閱讀 2156·2019-08-29 18:37
閱讀 613·2019-08-29 17:24