• JavaScript几种继承方式


    我们先构建一个Person的构造函数

    function Person(name) {
            this.name=name;
        }
        Person.prototype.sayHi=function () {
            console.log(this.name+",您好");
        }

    然后通过构建Student构造函数演示几种继承方式

    1.通过原型链方式进行继承

    function Student(age){
            this.age=age;
        }
    Student.prototype.study1=function () {
            console.log("我热衷于学习");
        }
     Student.prototype=new Person(“张三”);//改变原型指向,指向Person的实例对象的__proto__
     Student.prototype.study2=function () {
        console.log("我热衷于敲代码");
        }

    注意:使用此方式进行继承,在Student构造函数中添加原型方法应注意在改变原型指向后添加方法,上述代码中Student实例化后,Student的方式Study1调用失败study2才可调用成功

    存在缺点:Person的实例化对象时name属性固定为“张三”,当多次实例化Student对象时,导致继承的name属性一直为“张三”;

    2.在构造Student函数中使用call方式进行继承

    function  Student(age,name) {
            this.age=age;
            Person.call(this,name);//通过call方式改变this指向
        }
        Student.prototype.study=function () {
            console.log("学习");
        }

    存在缺点:此方式在Student实例化对象,可以调用Student原有方法study,但是无法调用Person构造函数中的方法

    3.组合继承

    function  Student(age,name) {
            this.age=age;
            Person.call(this,name);//通过call方式改变this指向
        }
      Student.prototype=new Person();//改变原型的指向
        Student.prototype.study=function () {
            console.log("学习");
        }

    解决了上述两种方式出现的问题

    4.拷贝继承

    var obj1={
            name:"张三",
            age:16,
            sayHi:function () {
                console.log(this.name+",您好");
            }
        }
        var obj2={};
        for(var key in obj1){
            obj2[key]=obj1[key];
        }
        console.dir(obj2);
        console.dir(obj1);
  • 相关阅读:
    一个matlab小程序:挑出沪市A股年报与一季度报在同一天发布的股票
    AWK
    matlab搜索路径
    从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
    AWK截取字符串
    tar GNU
    工作效率上的错觉(转载)
    matlab双精度浮点数编码及区间覆盖(原创)
    DNS服务器设置(Ubuntu10.04)
    sed
  • 原文地址:https://www.cnblogs.com/kongbaifeiye/p/11425118.html
Copyright © 2020-2023  润新知