引言
创建即继承---构造函数继承
何为构造函数?如果你还不清楚构造函数和普通函数的区别,那请看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 设计模式 --- 张容铭 著
注
本人对类式继承的一点点理解,若是那里解释的有问题,请多指教,谢谢!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。