• 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];       
    }

      

  • 相关阅读:
    CSS 备忘
    header操作cookie
    定时器传参数
    Display 和Visible 区别
    php 笔记
    概要设计要求
    iOS 之 UITextView
    iOS 按钮设置图片和事件
    iOS 设置控件圆角、文字、字体
    iOS 之 UIScrollView
  • 原文地址:https://www.cnblogs.com/qyuan/p/9764077.html
Copyright © 2020-2023  润新知