zoukankan      html  css  js  c++  java
  • JS继承

    继承:是类与类之间的一种关系,js中没有类,通过构造函数来模拟类

    首先定义一个“人”类

    function Person(name,age){
            this.name=name;
            this.age=age;
        }
      //使用原型可以实现数据共享 Person.prototype.eat
    =function(){ console.log("吃"); }

    定义一个“学生”类

     function Stu(sex){
             this.sex=sex;
         }

    一.借用构造函数实现继承(构造函数绑定)

      使用call或apply方法,将父对象的构造函数绑定在子对象上:  

    function Stu(sex,name,age){
             Person.call(this,name,age);
             this.sex=sex;
         }
         //实例化对象
           var stu1=new Stu("女","小花",20); 
            console.log(stu1.sex,stu1.name,stu1.age);//女,小花,20
            stu1.eat(); //say is not a function
     

      但是这种方法只能实现属性上的继承,原型方法不能继承。

    二.改变prototype指向实现继承 

             Stu.prototype=new Person();
           Stu.prototype.constructor=Stu;
             //实例化对象
           var stu1=new Stu("女","小花",20); 
             console.log(stu1.sex,stu1.name,stu1.age);//女,小花,20
             stu1.eat(); //

      第一行是改变原型指向的意思:

       Stu.prototype=new Person();

      第二行是什么意思呢?

       Stu.prototype.constructor=Stu;

      任何一个prototype对象都有一个constructor属性,指向它的构造函数,

      当原型指向发生改变,Stu.prototype.constructor的指向也将发生改变,指向了Person,

      我们需要手动纠正,避免继承链的紊乱。

      改变原型指向的缺点就是实例化多个对象,他们继承过来的属性值一样。

    三.寄生组合继承(常用的经典继承方式)

      

    function Stu(sex){
       Person.call(this,name,age);
    }
    Stu.prototype=new Person();
    Stu.prototype.constructor=Stu;

      通过改变原型指向+借用构造函数的方式-----既可以实现方法的继承,也可以实现属性值的不同;

    四.拷贝继承

      就是把他爸的东西复制一份给自己 

    for(var key in Person.prototype){
        Stu.prototype[key]=Person.prototypr[key];       
    }

      

  • 相关阅读:
    38. Count and Say(C++)
    35. Search Insert Position(C++)
    29. Divide Two Integers(C++)
    c++读取utf-8格式中英文混合string
    一种局部二值化算法:Sauvola算法
    Ubuntu 1804 本地显示远程服务器文件
    caffe 预训练 或者Fine-Tuning 操作
    caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: 没有那个文件或目录
    转载---LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    [leetcode-921-Minimum Add to Make Parentheses Valid]
  • 原文地址:https://www.cnblogs.com/qyuan/p/9764077.html
Copyright © 2011-2022 走看看