JS高级---继承

继承

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

需注意

首先,JS不是一门面向对象的语言, JS是一门基于对象的语言, 那么为何学习js还要学习面向对象, 由于面向对象的思想适合于人的想法, 编程起来会更加的方便,及后期的维护....
面向对象的编程语言中有类(class)的概念(也是一种特殊的数据类型), 可是JS不是面向对象的语言, 因此, JS中没有类(class), 可是JS能够模拟面向对象的思想编程, JS中会经过构造函数来模拟类的概念(class)
 

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

封装: 就是包装

一个值存储在一个变量中--封装
一坨重复代码放在一个函数中--封装
一系列的属性放在一个对象中--封装
一些功能相似的函数(方法)放在一个对象中--封装
好多相相似的对象放在一个js文件中---封装
 
 

继承: 

首先继承是一种关系,类(class)与类之间的关系, JS中没有类, 可是能够经过构造函数模拟类, 而后经过原型来实现继承
继承也是为了数据共享,js中的继承也是为了实现数据共享
原型做用之一:数据共享,节省内存空间
原型做用之二:为了实现继承
 
继承是一种关系:
父类级别与子类级别的关系
 

多态:

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

 
 

继承例子:

    //例子:
    //人,都有姓名,性别,年龄, 吃饭, 睡觉, 玩
    //学生,都有姓名,性别,年龄, 成绩, 吃饭, 睡觉, 玩 ,学习的行为


    //js中经过原型来实现继承

    function Person(name, age, sex) {
      this.name = name;
      this.sex = sex;
      this.age = age;
    }
    Person.prototype.eat = function () {
      console.log("人能够吃东西");
    };
    Person.prototype.sleep = function () {
      console.log("人在睡觉");
    };
    Person.prototype.play = function () {
      console.log("生活就是不同的玩法而已");
    };


    function Student(score) {
      this.score = score;
    }
    //改变学生的原型的指向便可==========>学生和人已经发生关系
    Student.prototype = new Person("小明", 10, "男");
    Student.prototype.study = function () {
      console.log("学习很累很累的哦.");
    };

    //相同的代码太多,形成了代码的冗余(重复的代码)

    var stu = new Student(100);
    console.log(stu.name);
    console.log(stu.age);
    console.log(stu.sex);
    stu.eat();
    stu.play();
    stu.sleep();
    console.log("下面的是学生对象中本身有的");
    console.log(stu.score);
    stu.study();

 

改变学生的原型的指向后==========>学生和人已经发生关系,产生原型链,则学生里面有人的属性和方法以及本身的属性和方法

相关文章
相关标签/搜索