【原生js】js面向对象三大特征之继承笔记

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6
 7 </head>
 8 <script>
 9 //中学生
10 function MidStu(name,age){
11     this.name=name;
12     this.age=age;
13
14     this.show=function(){
15         window.alert(this.name+"年龄是"+this.age);
16     }
17     this.pay=function(fee){
18         window.alert("你的学费是"+fee*0.8);
19     }
20 }
21 //小学生
22 function Pupil(name,age){
23     this.name=name;
24     this.age=age;
25
26     this.show=function(){
27         windwo.alert(this.name+"年龄是"+this.age);
28     }
29     this.pay=function(fee){
30         window.alert("你的学费是"+fee*0.5);
31     }
32 }
33 </script>
34 </html>
35 </script>
36 </body>
37 </html>

上面代码的问题就是太多重复代码。而继承就是这类问题的解决之道。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法。js中可以通过如下方式实现。

1.

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6
 7 </head>
 8 <script>
 9 //修改如下:
10 //1.把子类中共有的属性和方法抽取出,定义一个父类stu
11 function Stu(name,age){
12     this.name=name;
13     this.age=age;
14
15     this.show=function(){
16         window.alert(this.name+"年龄是="+this.age);
17     }
18 }
19 //2.通过对象冒充来继承父类的属性的方法
20 function MidStu(name,age){
21     this.stu=Stu;          //将Stu构造函数(类),赋给MidStu的属性  this.stu
22     this.stu(name,age);    //这里相当于调用Stu(name,age);完成初始化(这句话必须有,否则不能实现继承效果)
23     //接下来写MidStu自己的方法
24     this.pay=function(fee){
25         window.alert("你的学费是"+fee*0.8);
26     }
27 }
28 function Pupil(name,age){
29     this.stu=Stu;
30     this.stu(name,age);
31     this.pay=function(fee){
32         window.alert("你的学费是"+fee*0.5);
33     }
34 }
35 //测试
36 var midstu=new MidStu("大明",15);
37 var pupil=new Pupil("小明",12);
38 midstu.show();
39 midstu.pay(100);
40 pupil.show();
41 pupil.pay(100);
42 </script>
43 </html>
44 </script>
45 </body>
46 </html>

2.通过call方法。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6
 7 </head>
 8 <script>
 9 //修改如下:
10 //1.把子类中共有的属性和方法抽取出,定义一个父类stu
11 function Stu(name,age){
12     this.name=name;
13     this.age=age;
14
15     this.show=function(){
16         window.alert(this.name+"年龄是="+this.age);
17     }
18 }
19 //2.通过对象冒充来继承父类的属性的方法
20 function MidStu(name,age){
21     //这里这样理解:通过call修改了Stu构造函数的this指向,让他指向了调用者本身。
22     Stu.call(this,name,age);
23     this.pay=function(fee){
24         window.alert("你的学费是"+fee*0.8);
25     }
26 }
27 function Pupil(name,age){
28     Stu.call(this,name,age);
29     this.pay=function(fee){
30         window.alert("你的学费是"+fee*0.5);
31     }
32 }
33 //测试
34 var midstu=new MidStu("大明",15);
35 var pupil=new Pupil("小明",12);
36 midstu.show();
37 midstu.pay(100);
38 pupil.show();
39 pupil.pay(100);
40 </script>
41 </html>
42 </script>
43 </body>
44 </html>

3.通过apply实现。代码大部分相同,只是把上面的   Stu.call(this,name,age);   换成   Stu.apply(this,[name,age]);  就可以了。

时间: 2024-12-14 04:29:17

【原生js】js面向对象三大特征之继承笔记的相关文章

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

【原生js】js面向对象三大特征之多态笔记 (

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 7 </head> 8 <script> 9 /*多态的基本概念:一个引用类型(变量)在不同情况下的多种状态. 10 js本身是无态的,天生就支持多态.*/ 11 12 //M

【原生js】js面向对象三大特征之封装笔记

所谓封装,就是把抽象出的属性和对属性的操作写到类的定义中,称为封装. js中实现封装主要有两种封装(公开,私有) function Person(name,sal){ this.name=name; //公开 var sal=sal;//私有 this.showInfo=function(){ //公开 window.alert(this.name+” ”+sal); } showInfo2(){ //把函数私有化. window.alert(“你好”+this.name+” ”+sal) }

面向对象三大特征之继承(extends)——Java笔记(六)

继承: 从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系 泛化: 把子类里的共性抽取到父类里的来的过程 特化: 子类在父类的基础上上定义了自己特有的行为特征的过程 格式: 修饰符 class SubClass extends SuperClass{ } SubClass :导出类.继承类.子类 SuperClass:父类.基类.超类.源类 子类SubClass通过extends来继承父类SuperClass 继承是通过extends来实现的 继承提高了代码的复

面向对象三大特征之 继承

继承的作用:扩展已有的类的功能,实现代码的复用 语法: class 子类 extends 父类(){ 类体 } class person{ private string name; private int age; } public String setName(){ name=n; } public int setAge(){ age=a; } public void setAge(int a){ if(a>=0 && a<=100){ age=a; } } public S

面向对象三大特征之继承

一.继承 使用要点: 1.父类也称作超类.基类.派生类等. 2.Java中只有单继承,没有像C++那样的多继承.多继承会引起混乱,使得继承链过于复杂,系统难于维护.(类只有单继承,接口有多继承) 3.Java中类没有多继承,接口有多继承. 4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法). 5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object. package cn.s; public

PHP面向对象三大特征

<?php//PHP 面向对象三大特征 封装 继承 多态 <抽象> //封装 /** * @author bin * *//* class Person{ //encapsulate private $name; private $age; //这个就好比我们Java中的get set 想spring注入的 通过通过set方法 通过构造函数 一样 public function __set($columnName,$value){ $this->columnName = $valu

c++面向对象三大特征封装、继承和多态知识总结

面向对象三大特征:封装,继承,多态: 一.封装:该公开的就公开话,该私有的就隐藏掉,主要是由public,private实现:作用是便于分工和分模块,防止不必要的扩展: 二.继承:就是一种传承,可以把父类型中的数据传承到子类中,子类除了传承了父类的数据之外,还可以对父类型进行扩展: 公开继承  public 保护继承  protected 私有继承  private 保护成员:在子类和本类中可以访问,其他不行: 1.公开继承:在公开继承下,父类型中的数据是公开的到子类型中权限是公开的:父类型中保

(一)Python入门-6面向对象编程:07面向对象三大特征(封装、继承、多态)-继承

一:面向对象三大特征介绍 Python是面向对象的语言,也支持面向对象编程的三大特性:继承.封装(隐藏).多态. 封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法.相当于将“细节封装起来”,只 对外暴露“相关调用方法”. 通过前面学习的“私有属性.私有方法”的方式,实现“封装”.Python 追求简洁的语法,没有严格的语法级别的“访问控制符”,更多的是依靠程序员自觉实现. 继承 继承可以让子类具有父类的特性,提高了代码的重用性. 从设计上是一种增量进化,原有父类设计不变的情况下,可以