js组合继承
//组合继承指的是将原型链和借用构造函数(call、apply)的技术组合到一起,从而发挥二者之长的一种继承模式,
//其背后的思路就是使用原型链实现对原型属性和方法的继承;
//而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又能保证每个实例都有它自己的属性。
//详见《高三》6.3.3章节 2014-12-17
function SuperType(name) {
this.superName = name;
this.colors = ["red", "blue"];
}
SuperType.prototype.say = function () {
document.write("Hello,I'm " + this.superName + "。<br/>");
}
function SubType(name, age) {
SuperType.call(this, name); //借用构造函数继承,还可以给父类的构造函数传递参数
//定义子类自己的属性
this.age = age;
}
/*** 因为上面子类构造函数继承了父类的实例成员,所以此处只需要继承父类的原型成员即可 ***/
//SubType.prototype = new SuperType(); //同时继承了基类的原型成员和实例成员,但这样写会使父类构造函数执行两次。(《高三》P172)
SubType.prototype = SuperType.prototype; //只继承基类的原型成员,而不继承实例成员。这样是最合理的,并且父类构造函数也只执行一次。
SubType.prototype.constructor = SubType;
SubType.prototype.SaySub = function () {
document.write("Hello,My subName is " + this.superName + ",my age is: "+this.age+"。<br/>");
}
var instance1 = new SubType("wede",25);
instance1.colors.push("green");
document.write(instance1.colors); //red,blue,green
instance1.say(); //Hello,I'm wede。
instance1.SaySub(); //Hello,My subName is wede,my age is: 25。
var instance2 = new SubType("kitty", 18);
document.write(instance2.colors); //red,blue
instance2.say(); //Hello,I'm kitty。
instance2.SaySub(); //Hello,My subName is kitty,my age is: 18。
最新文章
- NOIp2016 游记
- QuickHit游戏
- 为IIS Express添加MIME映射
- QQ摄像头读取条码
- 我的第一份vim程序
- MVC中各类文件
- python 各模块
- wordpress教程之文章页single.php获取当前文章所属分类
- 错误:C:\Windows\System32\ssleay32.dll: Can&#39;t load IA 32-bit .dll on a AMD 64-bit
- cookie在vs又一次run的时候丢失
- IdentityServer4 通过 AccessToken 获取 UserClaims
- sprintf()、fprintf()、fscanf()的用法
- 复制程序到notepad++编辑器出现乱码的解决方法
- Swift 拷贝文件夹,实现文件夹内容整体复制
- Windows环境搭建mysql服务器
- kafka 学习资料
- iOS_URI跳转方式多种地图导航的代码实践
- Qt QpushButton 实现长按下功能
- jeecg框架解决跨域问题
- set方法在set传入值时报空指针异常,直接设置定值即可