博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js继承的实现;
阅读量:4096 次
发布时间:2019-05-25

本文共 2959 字,大约阅读时间需要 9 分钟。

js继承有5种实现方式: 

1、继承第一种方式:对象冒充 

function Parent(username){     this.username = username;     this.hello = function(){       alert(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(){       alert(this.password);     }   }   var parent = new Parent("zhangsan");   var child = new Child("lisi","123456");   parent.hello();   child.hello();   child.world(); 

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

function test(str){     alert(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(){       alert(this.username);     }   }   function Child(username,password){     Parent.call(this,username);         this.password = password;     this.world = function(){       alert(this.password);     }   }   var parent = new Parent("zhangsan");   var child = new Child("lisi","123456");   parent.hello();   child.hello();   child.world(); 

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

function Parent(username){     this.username = username;     this.hello = function(){       alert(this.username);     }   }   function Child(username,password){     Parent.apply(this,new Array(username));         this.password = password;     this.world = function(){       alert(this.password);     }   }   var parent = new Parent("zhangsan");   var child = new Child("lisi","123456");   parent.hello();   child.hello();   child.world(); 

4、继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承 
 

function Person(){   }   Person.prototype.hello = "hello";   Person.prototype.sayHello = function(){     alert(this.hello);   }     function Child(){   }   Child.prototype = new Person();//这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承   Child.prototype.world = "world";   Child.prototype.sayWorld = function(){     alert(this.world);   }     var c = new Child();   c.sayHello();   c.sayWorld(); 

5、继承的第五种方式:混合方式 
  混合了call方式、原型链方式 
 

function Parent(hello){     this.hello = hello;   }   Parent.prototype.sayHello = function(){     alert(this.hello);   }   function Child(hello,world){     Parent.call(this,hello);//将父类的属性继承过来     this.world = world;//新增一些属性   }   Child.prototype = new Parent();//将父类的方法继承过来   Child.prototype.sayWorld = function(){//新增一些方法     alert(this.world);   }   var c = new Child("zhangsan","lisi");   c.sayHello();   c.sayWorld();

js原型和继承详解

转载地址:http://rcqii.baihongyu.com/

你可能感兴趣的文章
DirectX11 聚光灯
查看>>
DirectX11 HLSL打包(packing)格式和“pad”变量的必要性
查看>>
DirectX11 光照演示示例Demo
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Vue+webpack构建单页router应用(二)
查看>>
从头开始讲Node.js——异步与事件驱动
查看>>
Node.js-模块和包
查看>>
NodeJS开发指南——mongoDB、Session
查看>>
Express: Can’t set headers after they are sent.
查看>>
2017年,这一次我们不聊技术
查看>>
实现接口创建线程
查看>>
HTML5的表单验证实例
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>