/*实现继承的六种方式*/
/*1.扩展原型对象的方法实现继承*/
function Foo1(){}
//在Foo1函数上扩展一个fn1方法,由构造函数创建的对象都具有fn1这个方法
Foo1.prototype.fn1=function(){};
/*2.替换原型对象实现继承*/
function Foo2(){}
//给Foo2函数的原型对象重新赋值,注意不要忘记添加constructor属性
Foo2.prototype={
constructor:Foo2,
fn1:function(){},
fn2:function(){}
};
/*3.混入继承*/
//已知两个对象,obj2对象继承obj中的属性
obj={name:"张三",age:16};
obj2={};
for(var key in obj){
obj2[key]=obj[key];
}
//封装一个函数
function mixin(target,source){
for(var key in source){
target[key]=source[key];
}
return target;
}
//jQuery中的extend方法就使用了混入继承
/*4.混入+原型继承*/
//给Foo4.prototype混入一些新的方法
function Foo4(){}
mixin(Foo4,{fn1:function(){},fn2:function(){}});
//jQuery中的jQuery.fn.extend()就是使用了这个方法
/*5.经典继承*/
var obj5={name:"liying",age:18};
function Foo5(){};
Foo5.prototype=obj5;
//封装一个方法
function getFun(obj5){//传入已知的对象
function F(){}
F.prototype=obj5;
return new F();//将继承创建的对象返回
}
//经典继承在ES5中得到了实现,Object.create()
/*6.借用构造函数实现继承*/
function Foo6(name,age){
this.name=name;
this.age=age;
}
function NewFoo(name,age,number){
Foo6.call(this,name,age);
this.number=number;
}
//newFoo构造函数借用Foo6构造函数中的属性和方法
var obj = new NewFoo("张三",18,10);
console.log(obj);//NewFoo {name: "张三", age: 18, number: 10}

  

最新文章

  1. windows 部署 git 服务器报 Please make sure you have the correct access rights and the repository exists.错误
  2. [LeetCode] House Robber 打家劫舍
  3. 设计模式C#实现(十三)——享元模式(蝇量模式)
  4. Java(Helloworld.java)
  5. web_submit_data函数上传图片
  6. 第二章 centos安装maven
  7. iBatis简单介绍
  8. 远哥教你MuleESB系列视频教程
  9. Tools - 为知笔记
  10. Cocos2d-x 2.0 自适应多种分辨率
  11. BZOJ2768: [JLOI2010]冠军调查
  12. Struts2拦截器配置
  13. jsp中九大内置对象
  14. Android 方法数超过64k、编译OOM、编译过慢解决方案。
  15. Java 基础系列合集
  16. VUE优秀的组件库总结
  17. linux新手非常有用的20个命令
  18. python 爬取全量百度POI
  19. JavaScript中的两种全局对象
  20. JavaScript的进阶之路(四)理解对象1

热门文章

  1. linux远程管理器 - xshell和xftp使用教程(zhuan)
  2. centos 7 设置开机启动脚本
  3. ArcGIS 面要素缝隙孔洞检查代码 C# GP
  4. 九、hibernate的查询(QBC)
  5. Vue证明题
  6. etcd注册服务
  7. docker镜像仓库
  8. html中代替空格、大于号、小于号等字符编码
  9. C51的关键字解释
  10. Pandas_key_point