引言
创建即继承---构造函数继承
何为构造函数?如果你还不清楚构造函数和普通函数的区别,那请看
构造函数继承
构造函数继承的核心 是 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 设计模式 --- 张容铭 著
注
本人对类式继承的一点点理解,若是那里解释的有问题,请多指教,谢谢!