几种常见的继承
来源:互联网 发布:金融互助系统源码 编辑:程序博客网 时间:2024/05/20 18:52
常见的继承有扩展原型对象实现继承、替换原型对象实现继承、混入继承、混入+原型继承、经典继承、借用构造函数实现继承这六种。每个人的叫法可能不同,但是原理都一样。
扩展原型对象实现继承
实现原理:函数有一个prototype的属性(原型对象),通过给这个原型对象添加一个属性、方法,从而可以让构造函数的实例可以访问到
function Person(){}Person.prototype.name="Jim";Person.prototype.sayHello=function () { console.log("Hello"); }var p1=new Person();console.log(p1.name) //输出"Jim"
替换原型对象实现继承
上面这种方式是最简单的也是最好理解的,但是有缺点,设置少数的属性或者方法还可以,但是要是设置多个呢?这种继承方法就不行了,太麻烦了,于是有了这种继承方式:替换原型对象实现继承。用于多个属性、方法的实现。
function Person () {}Person.prototype={ constructor:Person, a1:function () {}, a2:function () {}, a3:function () {}, a4:function () {}, a5:function () {}, .......}var p1=new Person();p1.a1();p1.a2();.......
注意:使用这种方式继承,必须要加上constructor:Person:Person这个属性,因为Person.prototype会将原型对象的这个属性替换掉,如果不加上,值将不指向构造函数。
混入继承
使用场景:已知对象o1,o3,需要将o1中的属性、方法拷贝到o3里面。
var o1={name:"张三",age:18,height:180};var o2=function () {};o2.prototype.a="a";var o3=new o2();//功能封装function mixin(target,source) { for(var key in source) { target[key]=source[key]; } return target;}mixin(o3,o1)//这样o3里面就有了o1的属性和方法了。
注意:jQuery里面的extend方法就是这个原理实现的。
混入+原型继承
利用混入继承向原型对象中添加属性和方法,其本质还是用了混入继承封装的方法
function Person () {};Person.prototype.extend=function (source) { mixin(Person.prototype,source);}Person.prototype.extend({a:20,b:25,c:30});//其实就相当于Person.prototype.a=20;Person.prototype.b=25......var p1=new Person();//p1就可以直接访问p1.a;p1.b了。
注意:在jQ中,如果你想要在jQ上面添加方法,用的是$.fn.extend(),其实它就相当于jQuery.prototype.extend()
经典继承
由道格拉斯提出。使用场景:已知一个对象o,需要创建一个新的对象,这个新的对象继承自对象o。
//功能封装function create(o) { function F(){} F.prototype=o; return new F(); }var o={name:"张三",age:18};var o2=create(o);//这样o2就继承自o了
借用构造函数实现继承
使用场景:子类构造函数借用父类构造函数来完成,给子类的实例添加属性。
function f1(name,age){ this.name=name; this.age=age;}function f2(name,age,length) { f1.call(this,name,age) this.length=length;}var ff2=new f2("张三",23,180);
总结:这几种方法原理虽然不难,但是难的是如何灵活运用,这个也没办法,只能自己实践。
1 0
- 几种常见的继承
- 几种继承的方式
- 常见的几种RuntimeException-
- 几种常见的排序
- 常见的几种RuntimeException
- 常见的几种排序
- 常见的几种RuntimeException-
- 常见的几种RuntimeException
- 几种常见的排序
- 常见的几种字符集
- 常见的几种RunTimeExecption
- 常见的几种排序
- 常见的几种RuntimeException
- 常见的几种RuntimeException
- 几种常见的查找
- 几种常见的Shell
- 常见的几种RuntimeException
- 常见的几种RuntimeException
- 微信开发整合日记(2)
- Linux系统Mysql5.6安装
- POJ 1006 Biorhythms
- 机器学习笔记(一)-局部加权回归(Locally weighted regression)LWR
- 记信息论与编码之课设-哈夫曼编码
- 几种常见的继承
- Java网络编程总结
- 必备工具
- SpringMVC的四个基本注解annotation
- imooc js进阶篇 6-11编程练习
- Windows文本文件编码
- VB的PaintPicture与StretchBlt的异同比较
- 136. Single Number
- POJ 1547 Clay Bully G++