JavaScript之继承

1 面向对象编程思想:根据需求,分析对象,找到对象有什么特征和行为,通过代码的方式来实现需求,要想实现这个需求,就要创建对象,要想创建对象,就应该显示有构造函数,然后通过构造函数来创建对象.,通过对象调用属性和方法来实现相应的功能及需求,即可

2 JS不是一门面向对象的语言,JS是一门基于对象的语言

3 面向对象的编程语言中有类(class)的概念(也是一种特殊的数据类型),但是JS不是面向对象的语言,所以,JS中没有类(class),但是JS可以模拟面向对象的思想编程,JS中会通过构造函数来模拟类的概念(class)

面向对象的三种特性:封装,继承,多态

(1) 封装:就是包装
* 一个值存储在一个变量中--封装
* 把一些重复的代码放在一个函数中--封装
* 一系列的属性放在一个对象中--封装
* 一些功能类似的函数(方法)放在一个对象中--封装
* 很多相类似的对象放在一个js文件中---封装


(2) 继承: 首先继承是一种关系,类(class)与类之间的关系,JS中没有类,但是可以通过构造函数模拟类,然后通过原型来实现继承。继承也是为了数据共享,js中的继承也是为了实现数据共享

(3) 多态:一个对象有不同的行为,或者是同一个行为针对不同的对象,产生不同的结果,要想有多态,就要先有继承,js中可以模拟多态,但是不会去使用,也不会模拟

封装在此处没有必要进行过多的介绍,此处主要讲解继承

  原型继承:改变原型的指向

  构造函数继承:主要解决属性的问题

组合继承:原型继承+借用构造函数继承

一个对象继承了另外一个对象的某些属性和方法(既能解决属性问题,又能解决方法问题)

//人的原型方法
    People.prototype.eat=function () {
        console.log("有些人吃了睡,睡了玩,玩饿了就接着睡");
    };
    
    
    //学生的构造函数
    function Student(name,age,sex,score) {
        People.call(this,name,age,sex);
        this.score=score;
    }
    //学生的原型方法(原型的指向发生改变)
    Student.prototype=new People();
    Student.prototype.eat=function () {
        console.log("学生学习敲代码累了之后就开始吃东西");
    };
    
    
    //student的实例化对象
    var stu01=new Student("东方不败",18,"保密","100");
    console.log(stu01.name,stu01.age,stu01.sex,stu01.score);
    stu01.eat();
    var stu02=new Student("扶摇",18,"女","100");
    console.log(stu02.name,stu02.age,stu02.sex,stu02.score);
    stu02.eat();

拷贝继承:

就是把对象中需要共享的属性或者方法,通过直接遍历的方式复制到另一个对象中(浅拷贝)

 //人的构造函数
    function People() {

    }
    //人的原型方法
    People.prototype.name="东方不败";
    People.prototype.age=18;
    People.prototype.sex="女";
    People.prototype.eat=function () {
        console.log("有些人吃了睡,睡了玩,玩饿了就接着睡");
    };
    

    //一个空的学生对象
    var student={};
    for (var key in People.prototype){
        student[key]=People.prototype[key];
    }
    
    
    console.log(student);
    student.eat();

猜你喜欢

转载自blog.csdn.net/qq_41320857/article/details/81346809