博主信息
YueLun
博文
7
粉丝
0
评论
1
访问量
2458
积分:0
P豆:14

JavaScript中的继承方式

2020年11月21日 13:51:46阅读数:50博客 / YueLun/ 经验之谈

    一、前言

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

    继承,类与类之间的关系,面向对象的语言的继承是为了多态服务的。

    js不是面向对象的语言,但是可以模拟面向对象.模拟继承.为了节省内存空间。

    在js中我们可以通过原型来进行继承,它的原理是改变原型的指向

    原型的两个作用:

    原型作用1: 数据共享 ,目的是:为了节省内存空间,

    原型作用2: 为了实现继承 目的是:为了节省内存空间

    二、继承的几种方式

    1.借用构造函数继承

    优点:该方式主要解决属性的问题
    缺点:父级类别中的方法不能继承

    <script>
     function Person(name, age, sex, weight) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.weight = weight;
      }
    
      Person.prototype.sayHi = function () {
        console.log("hello!");
      };
    
      function Student(name, age, weight, sex, score,) {  //===》这里需要传入构造函数的参数
        Person.call(this, name, age, sex, weight); //=======>借用需要的构造函数,传入参数
        this.score = score;
      }
    
      var st = new Student("小明", 18, "180kg", "男", 99);
      console.log(st.name, st.age, st.sex, st.weight, st.score);
      //st.sayHi();  //父亲级类别中的方法不能继承
    
      var stu2 = new Student("小红", 20, "女", "20kg", "120");
      console.log(stu2.name, stu2.age, stu2.sex, stu2.weight, stu2.score);
    
      var stu3 = new Student("小丽", 30, "妖", "30kg", "130");
      console.log(stu3.name, stu3.age, stu3.sex, stu3.weight, stu3.score);
    </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    2.组合继承

    原型继承+借用构造函数继承。既能解决属性问题,又能解决方法不能继承问题。 //一般用这种,前提用构造函数创建对象

    <script>
      function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
      }
    
      Person.prototype.sayHi = function () {
        console.log("嘿嘿嘿嘿");
      };
    
      function Student(name, age, sex, score) {
        //借用构造函数:解决属性值重复的问题
        Person.call(this, name, age, sex);
        this.score = score;
      }
    
      //改变原型指向————继承
      Student.prototype = new Person(); //===>这里不传参数
      Student.prototype.eat = function () {
        console.log("吃试卷");
      };
    
      var st = new Student("小明", 18, "男", "100分");
      console.log(st.name, st.age, st.sex, st.score);
      st.sayHi();
      st.eat();
    
      var st1 = new Student("小黑", 28, "女", "110分");
      console.log(st1.name, st1.age, st1.sex, st1.score);
      st1.sayHi();
      st1.eat();
    
      var st2 = new Student("小白", 38, "妖", "120分");
      console.log(st2.name, st2.age, st2.sex, st2.score);
      st2.sayHi();
      st2.eat();
    </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    3.拷贝继承

    就是把对象中需要共享的属性或者方法,直接遍历的方式复制到另一个对象中。

    3.1 通过改变地址指向实现
      var obj1 = {
        name: "小糊涂",
        age: 20,
        sleep: function () {
          console.log("睡觉");
        }
      }
    
      //改变了地址的指向
      var obj2 = obj1;
      console.log(obj2.name, obj2.age);
      obj2.sleep();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    3.2 通过循环实现
      var obj1 = {
        name: "小糊涂",
        age: 20,
        sleep: function () {
          console.log("睡觉");
        }
      };
    
      var obj2 = {};
      for (var key in obj1) {
        obj2[key] = obj1[key];
      }
      console.log(obj2.name);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
                   

    全部评论

    文明上网理性发言,请遵守新闻评论服务协议

    条评论
  • ​在这篇文章,我们将讨论原型以及如何在 JS 使用它们进行。我们还将会看到原型法与基于类有何不同。
    php静态法:使用override函数进行,代码为【function write(){echo 'I can be overriden!
    css属性有:1、display;2、文本属性;3、盒子模型属性;4、背景属性;5、定位属性;6、生成内容属性;7、轮廓样属性;8、页面样属性;9、声音样属性。
    css内联元素可属性有:text-shadow、line-height、word-spacing、letter-spacing、font-family、font-weight、font-size
    原型是Javascript基础,JavaScript就是基于原型,函数原型对象​在JavaScript,我们创建一个函数A,那么浏览器就会在内存创建一个对象B。
    在网站开发,异步事件是项目必然需要处理一个环节,也因为前端框架兴起,通过框架实现 SPA 已经是快速建构网站标配了,一部获取数据也就成了不可或缺一环;本文来就讲一讲 JavaScript 异步处理
    Java使用时需要注意:1、java只有单,接口有多;2、子类父类,可以得到父类全部属性和法,但是不一定能直接法。
    ES8 引入 async/await 在 JavaScript 异步编程是一个极好改进。它提供了使用同步样代码异步访问 resoruces ,而不会阻塞主线程。
    css color属性有性。
    golang实现法:Go采用组合表达语义,代码为【type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("**
    extends在java作用是意思,在Java,通过关键字extends一个已有类,被类称为父类【超类,基类】,新类称为子类【派生类】,并且在Java不允许多
    接口只能定义常量和抽象法,对。在Java语言,接口是一个抽象类型,是抽象集合,通常以关键字interface来声明。一个类通过接口,从而来接口抽象法。
    php traits作用是针对php这样语言设计,旨在让开发者很便在不同体系多个类之间公用一系列法,以减少单带来局限性。
    区别:1、HashMap元素是没有顺序;TreeMap所有元素都是有某一固定顺序
    Java可以自定义异常类。具体法是:1、编写一个类,Exception,或者RuntimeException;2、提供两个构造法,一个无参构造法,一个带有String参数
    cssgrid布局和表格区别是:1、grid是在css实现,表格是在html实现;2、grid是固定大小,表格是大小可变;3、grid自面板元素,表格自块元素。
    Traits 是一种为类似 PHP 语言而准备代码复用机制。Trait 为了减少单语言限制,使开发人员能够自由地在不同层次结构内独立复用法集
    通过Thread类来创建线程步骤:1、创建一个类Thread类,并重写run()法;2、创建Thread类子类对象;3、调用该对象start()法,然后调用run()法。
    JS,调用Number()主要有两种,一是作为一个 function 将任意类型数据转换成数值,二是作为一个类,通过new 生成一个数值对象。
    本文主要讲了原型如何在JavaScript工作,以及如何通过[Prototype]所有对象共享隐藏属性链接对象属性和法;以及如何创建自定义构造函数以及原型如何工作以传递属性和法值。