javascript的几种继承
2016-03-06 22:29
537 查看
1.原型链继承:构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。确认原型和实例之间的关系用instanceof。
原型链继承缺点:字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数function SuperType(name){ this.name=name; this.colors=['red','blue','green']; } SuperType.prototype.sayName=function(){ console.log(this.name); } function SubType(name,age){ SuperType.call(this,name); this.age=age; } function object(o){ function F(){}; F.prototype=o; return new F(); }; /*inheritPrototype此函数第一步是创建超类型原型的一个副本。第二步是为创建的副本添加constructor属性, * 从而弥补因重写原型而失去的默认的constructor属性,第三步将新创建的对象(副本)赋值给子类型的原型*/ function inheritPrototype(subType,superType){ var prototype=object(superType.prototype);//创建对象 prototype.constructor=subType;//增强对象 subType.prototype=prototype;//指定对象 } inheritPrototype(SubType,SuperType); SubType.prototype.sayAge=function(){ console.log(this.age); } var p=new SubType('xiaoli',24); console.log(p.sayName()); console.log(p.sayAge()); console.log(p.colors)View Code
此方法优点:只调用了一次父类SuperType构造函数,并且因此避免了在SubType.prototype上面创建不必要的多余的属性。同时原型链还能保持不变,还能正常使用instanceof和isPrototypeOf();
相关文章推荐
- js之--如何合理的创建对象
- js控制html下拉框select的选择
- javascript删除,添加元素
- 解决js跨域问题的基本方法之 -------JSONP
- JavaScript小工具--TAB选项卡切换隐藏显示动画效果
- layer.js弹出框
- extjs5学习之 Model日期转换
- js 实现各种排序
- JS 数组随机排序
- 记录:js删除数组中某一项或几项的几种方法
- js日期插件
- js日期插件
- js日期插件
- Js中的with
- 传智博客 JS 四
- js 正则表达式
- js 正则表达式
- Uncaught SyntaxError: Unexpected token <
- js主动提交表单
- (36)JS运动之使物体向右运动