摘要:組合繼承法把父對象方法掛載到父類的原型對象上去,實現方法復用原型的構造函數指向程序員
原型繼承
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");//原型繼承將子對象的原型對象指向父對象的實例 ; 缺點:不能由子對象像父對象傳遞參數, var stu1 = new Student(1);//不能由子對象像父對象傳遞參數, 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、不能由子對象像父對象傳遞參數,2、對于引用型的屬性修改之后會印象其他的實例對象;構造函數繼承
//構造函數繼承 function Teacher(name,sex,type){ this.type=type; Person.call(this,name,sex); } var tea1 = new Teacher("E","female","數學"); //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、每次實例化對象會重新構建函數,浪費內存。組合繼承法
把父對象方法掛載到父類的原型對象上去,實現方法復用
function Worker(name,sex,job){ this.job = job; Person.call(this,name,sex) } Worker.prototype = new Person(); Worker.prototype.constructor = Worker;//原型的構造函數指向worker var wor1 = new Worker("I","female","程序員"); wor1.hello(); wor1.friends.J = "male"; wor1.showFriends();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102277.html
摘要:因為這造成了繼承鏈的紊亂,因為的實例是由構造函數創建的,現在其屬性卻指向了為了避免這一現象,就必須在替換對象之后,為新的對象加上屬性,使其指向原來的構造函數。這個函數接收兩個參數子類型構造函數和超類型構造函數。 最近一直在研究js面向對象,原型鏈繼承是一個難點,下面是我對繼承的理解以下文章借鑒自CSDN季詩筱的博客 原型鏈繼承的基本概念: ES中描述了原型鏈的概念,并將原型鏈作為實現...
摘要:創建自定義的構造函數之后,其原型對象只會取得屬性,其他方法都是從繼承來的。優缺點寄生式繼承在主要考慮對象而不是創建自定義類型和構造函數時,是十分有用的。 原文鏈接:https://kongchenglc.coding.me... 1.原型鏈 ??js的繼承機制不同于傳統的面向對象語言,采用原型鏈實現繼承,基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。理解原型鏈必須先理...
摘要:可以通過構造函數和原型的方式模擬實現類的功能。原型式繼承與類式繼承類式繼承是在子類型構造函數的內部調用超類型的構造函數。寄生式繼承這種繼承方式是把原型式工廠模式結合起來,目的是為了封裝創建的過程。 js繼承的概念 js里常用的如下兩種繼承方式: 原型鏈繼承(對象間的繼承) 類式繼承(構造函數間的繼承) 由于js不像java那樣是真正面向對象的語言,js是基于對象的,它沒有類的概念。...
摘要:想要解決這樣的問題的話,可以借助構造函數也可以叫做偽造對象或經典繼承。這種方式實現非常簡單,就是在子對象的構造函數中調用父對象的構造函數。 原型式繼承 原型式繼承,就是一定一個函數,該函數中創建一個臨時性的構造函數,將作為參數,傳入的對象作為這個構造函數的原型,最后返回這個構造函數的實例對象 /*定義函數:用于實現對象之間的繼承 參數: obj:表示繼承關系中的父級對象...
摘要:綜上所述有原型鏈繼承,構造函數繼承經典繼承,組合繼承,寄生繼承,寄生組合繼承五種方法,寄生組合式繼承,集寄生式繼承和組合繼承的優點于一身是實現基于類型繼承的最有效方法。 一、前言 繼承是面向對象(OOP)語言中的一個最為人津津樂道的概念。許多面對對象(OOP)語言都支持兩種繼承方式::接口繼承 和 實現繼承 。 接口繼承只繼承方法簽名,而實現繼承則繼承實際的方法。由于js中方法沒有簽名...
摘要:創建子類實例,可以向父類構造函數傳參數。修復如下其實方式組合繼承優化核心通過這種方式,砍掉父類的實例屬性,這樣在調用父類的構造函數的時候,就不會初始化兩次實例,避免組合繼承的缺點。優點只調用一次父類構造函數。 2018.06.03 第一部分:導入 1、構造函數的屬性 funcion A(name) { this.name = name; // 實例基本屬性 (該屬性,強調私有,...
閱讀 955·2023-04-25 23:54
閱讀 3036·2021-11-08 13:21
閱讀 3759·2021-09-27 13:35
閱讀 3381·2021-07-26 23:41
閱讀 1043·2019-08-30 15:52
閱讀 3431·2019-08-30 11:27
閱讀 2088·2019-08-29 18:37
閱讀 528·2019-08-29 17:24