js继承有5种实现方式:

  • 继承第一种方式:对象冒充
 function Parent(username){
this.username = username;
this.hello = function(){
document.write(this.username);
}
}
function Child(username,password){
//通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承
//第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象,
//第二步:执行this.method方法,即执行Parent所指向的对象函数
//第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法
this.method = Parent;
this.method(username);//最关键的一行
delete this.method; this.password = password;
this.world = function(){
document.write(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
  • 继承第二种方式:call()方法方式      

call方法是Function类中的方法
        call方法的第一个参数的值赋值给类(即方法)中出现的this
        call方法的第二个参数开始依次赋值给类(即方法)所接受的参数

 function test(str){
document.write(this.name + " " + str);
}
var object = new Object();
object.name = "zhangsan";
test.call(object,"langsin");//此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str function Parent(username){
this.username = username;
this.hello = function(){
document.write(this.username);
}
}
function Child(username,password){
Parent.call(this,username);
this.password = password;
this.world = function(){
document.write(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
  • 继承的第三种方式:apply()方法方式 

apply方法接受2个参数:
            A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this
            B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数

 function Parent(username){
this.username = username;
this.hello = function(){
document.write(this.username);
}
}
function Child(username,password){
Parent.apply(this,new Array(username));
this.password = password;
this.world = function(){
document.write(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
  • 继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承
 function Person(){
}
Person.prototype.hello = "hello";
Person.prototype.sayHello = function(){
document.write(this.hello);
} function Child(){
}
//这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承
Child.prototype = new Person();
Child.prototype.world = "world";
Child.prototype.sayWorld = function(){
document.write(this.world);
}
var c = new Child();
c.sayHello();
c.sayWorld();
  • 继承的第五种方式:混合方式 ,混合了call方式、原型链方式 
 function Parent(hello){
this.hello = hello;
}
Parent.prototype.sayHello = function(){
document.write(this.world);
}
function Child(hello,world){
Parent.call(this,hello);//将父类的属性继承过来
this.world = world;//新增一些属性
}
//将父类的方法继承过来
Child.prototype = new Parent();
//新增一些方法
Child.prototype.sayWorld = function(){
document.write(this.world);
}
var c = new Child("zhangsan","lisi");
c.sayHello();
c.sayWorld();

js继承的更多相关文章

  1. js继承之call,apply和prototype随谈

    在js中,call,apply和prototype都可以实现对象的继承,下面我们看一个例子: function FatherObj1() { this.sayhello = "I am jo ...

  2. js继承精益求精之寄生式组合继承

    一.混合/组合继承的不足 上一篇JS继承终于混合继承,认真思考一下,发现其还是有不足之处的: 空间上的冗余:在使用原型链的方法继承父类的原型属性(Animal.prototype)的同时,也在子类的原 ...

  3. 老生常谈--Js继承小结

    一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.net/stoy ...

  4. Js继承小结

    Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...

  5. js继承实现

    JS实现继承可以分为:对象冒充和原型链继承 其中对象冒充又包括:临时变量,call 和 apply 临时变量方法: function Person(name,sex){ this.name = nam ...

  6. js继承之借用构造函数继承

    我的上一篇文章介绍了,原型链继承模式.但是单纯的原型链模式并不能很好地实现继承. 一.原型链的缺点 1.1 单纯的原型链继承最大的一个缺点,来自于原型中包含引用类型的值. 本来,我们没有通过原型链实现 ...

  7. js继承之原型链继承

    面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法. 一.构造函数.原型与实例之间的关系 每创建一个函数,该函数就会自动带有一个 prototype 属性.该属性是个指针, ...

  8. js继承的常用方法

    写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...

  9. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

随机推荐

  1. CentOS6.5上源码安装MongoDB3.2.1

    1.环境准备: mkdir /home/mongodb #创建MongoDB程序存放目录 mkdir /data/mongodata -p #创建数据存放目录 mkdir /data/log/mong ...

  2. Python全栈开发day9

    一.面向对象进阶 1.利用python反射查看面向对象成员 对于对象:反射既可以找对象,类的成员 对于类:反射只能找类中的成员 2.利用反射操作模块(查找类,创建对象,查找对象中字段) 1 2 3 4 ...

  3. sql server之临时表

    一.临时表介绍 临时表在运行被创建的,虽说它的名字叫做临时表,可是对它的操作和我们平时操控表的操作基本一样, 比如最简单增.删.改.查等等.但是,需要注意的是临时表的创建是有范围限制的. 二.临时表分 ...

  4. getGLES1ExtensionString: Could not find GLES 1.x config!

    编辑模拟器中  Emulated performance 中不选  auto 和  Hardware - GLES 2.0,选择Software-GLES2.0.解决问题

  5. tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法

    问题原因:我们在运行tomcat时候一般用8080端口,但是当端口被占用的时候便不能正常使用tomcat并且会造成上述的错误.而端口被占用的原因有很多,这次的原因是因为装好tomcat以后已经启动了一 ...

  6. hive中分号问题

    分号是sql的结束符,在hql中亦如此,但是hive对分号的识别没有那么智能,如下: select concat(';','aa') from lhc limit 1; FAILED: Parse E ...

  7. 实现浏览器打开图片的url默认是下载

    在返回的response里面设置HTTP头的Content-Disposition=attachement;filename=xxxx,即可实现文件另存为"xxxx":Conten ...

  8. ios 中 documents和library 的区别

    简单来说就是用户在APP中输入并保存的数据放在Documents文件夹中(如用户输入的文本等), 并且如果手机连接电脑时,iTunes会自动备份其中文件,苹果不允许我们将下载的大型文件放入该文件夹. ...

  9. js上传压缩图片

    原文链接:http://blog.csdn.net/iefreer/article/details/53039848 手机用户拍的照片通常会有2M以上,这对服务器带宽产生较大压力. 因此在某些应用下( ...

  10. 完整的 mime type 列表

    原文地址:http://blog.csdn.net/zhaoyw2008/article/details/46647723 Suffixes applicable Media type and sub ...