美文网首页
js 原型及继承的一点理解

js 原型及继承的一点理解

作者: debt | 来源:发表于2016-05-12 23:34 被阅读220次

    类式继承

    1. 一个构造函数对应一个原型,原型相当于他的影子,这个影子里也可以添加属性、方法。
    2. 最常见的继承方法 Sub.prototype=new Super(); 理解下就是将父类的一个实例对象传给子类的原型。 这里注意理解是new了一个父类对象实例,这个实例包含两部分内容
    • 构造函数里面的属性方法
    • 原型对象里的属性方法
      b=new Sub() 首先生成一个实例对象b 这个b首先包括自身构造函数里面的属性方法,还包括原型对象里的属性方法,它的原型是啥子哦?上面说了是父类的一个实例,里面东西很全,所以啊,子类就是继承的这个父类的实例对象

    这样有两个不好的方面

    1. 如果实例了两个子类b和c ,而父类中有一个数组,这时如果在b.arr.push("c") 这时就会改变他们那个父类实例对象。这里多说两句,明天记得补充
    2. 这样继承好像不能传参

    构造函数继承

    这个主要是理解call ;晚上大概理解了,Super.call(this,data);这句话是说把data置入Super的构造函数中运行 不过这时的this指向的是Sub; 这样做的好处当然是可以传参,不过不能继承父类原型中的属性方法

    原型式继承

    function inherit(o){
    function  F(){}
    F.prototype=o;
    return new F();
    }

    这里的o为父类对象(注意这里是一个对象,并不是构造函数),然后上面这段代码其实是对类式继承的一种封装(也不完全准确,如果是原型类继承的话应该是F.prototype=new o()) 这里是直接将一个对象赋给了F 。 所以啊,这个也不能避免类式继承的第一个问题,就是subOne.friend.push("d")后 person.friend的结果就是abcd;

    var person={
    name:"ljd",
    friend:["a","b","c"]
    }
    var subOne=inherit(person);
    var subTwo=inherit(person);

    ECMAScript中Object.create()方法和inherit是一样样的。


    寄生式继承

    相关文章

      网友评论

          本文标题:js 原型及继承的一点理解

          本文链接:https://www.haomeiwen.com/subject/slvprttx.html