简单的解释js组合继承的三个关键点

上一段组合继承的代码:
function SuperType(name){
    this.name  = name;
    this.colors = ["red", "blue", "green"];
}
 
<!-- 关键点1 -->
SuperType.prototype.sayName = function(){
    console.log(this.name);
};
 
function SubType(name, age){
<!-- 关键点2 -->
    SuperType.call(this, name);
    this.age = age;
}
 
<!-- 关键点3 -->
SubType.prototype = new SuperType();
 
<!-- 还是关键点1 -->
SubType.prototype.sayAge = function(){
    console.log(this.age);
};
 
var instance1 = new SubType("Jiangshui",22);
instance1.colors.push("black");
console.log(instance1.colors);
instance1.sayName();
instance1.sayAge();
 
var instance2 = new SubType("Dazheng",22);
console.log(instance2.colors);
instance2.sayName();
instance2.sayAge();
关键点1:所有的方法定义在prototype里,这样做当实例被创建的时候他会直接通过原型链去找该方法的引用,避免每次创建实例的时候方法也被创建,节省内存。
关键点2:调用父类的call是为了实现传递参数给父类的功能。
关键点3:SubType.prototype = new SuperType()的意义在于将子类的prototype.__proto__就指向了父类的prototype,这样子类的实例就会顺着原型链一直找到父类的prototype,从而使用父类prototype中的方法
posted @ 2017-10-30 20:50  清源如风  阅读(141)  评论(0编辑  收藏  举报