js 原型及继承的一点理解

2016-05-12  本文已影响220人  debt

类式继承

  1. 一个构造函数对应一个原型,原型相当于他的影子,这个影子里也可以添加属性、方法。
  2. 最常见的继承方法 Sub.prototype=new Super(); 理解下就是将父类的一个实例对象传给子类的原型。 这里注意理解是new了一个父类对象实例,这个实例包含两部分内容

这样有两个不好的方面

  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是一样样的。


寄生式继承

上一篇下一篇

猜你喜欢

热点阅读