面向对象的JavaScript之继承(二) 构造函数继承

引言

创建即继承---构造函数继承

何为构造函数?如果你还不清楚构造函数和普通函数的区别,那请看JavaScript构造函数与普通函数

构造函数继承

构造函数继承的核心 是 call()apply() 的使用,通过这个方法,改变函数的作用环境.

function SuperClass(name){
    this.name =name;
    this.book = ['c','java','htnl']

    this.getBook =function(){
        return this.book;
    }
}

//为父类添加方法
SuperClass.prototype.getName =function(){
    return this.name;
}

//声明子类
function SubClass(name){
    SuperClass.call(this,name)

}

var a = new SubClass('demongao');
var b = new SubClass('gsc');

a.book.push("cccc");
console.log(a.book,a.name); //["c", "java", "htnl", "cccc"] "demongao"
console.log(b.book,b.name); //["c", "java", "htnl"] "gsc"

console.log(a.getBook()); //["c", "java", "htnl", "cccc"]
console.log(a.getName()) //TypeError

       子类通过 SuperClass.call(this,name) 将子类中的变量在父类中执行了一遍,由于父类中是给 this 绑定属性的,因此子类自然也就继承了父类的共有属性.

       由于这种类型的继承没有涉及原型prototype,所以父类的原型方法自然不会被子类继承,而如果想被子类继承就必须要放在构造函数中,这样创建出来的每个实例都会单独拥有一份而不能共用,这就违背了代码复用的原则


下一节讲解 组合继承 ,它具备上两种继承式的优点

参考

  • 个人博客

  • JavaScript 设计模式 --- 张容铭 著

本人对类式继承的一点点理解,若是那里解释的有问题,请多指教,谢谢!

你可能感兴趣的:(javascript,javascript继承,面向对象设计模式)