js实现继承的5种方式


Posted in Javascript onDecember 01, 2015

本文实例讲述了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();

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
Jquery replace 字符替换实现代码
Dec 02 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 Javascript
JavaScript 闭包的使用场景
Sep 17 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 Javascript
6种javascript显示当前系统时间代码
Dec 01 #Javascript
基于jQuery实现网页打印功能
Dec 01 #Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
Dec 01 #Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 #Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 #Javascript
You might like
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
javascript数组使用调用方法汇总
2007/12/08 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
python实现代理服务功能实例
2013/11/15 Python
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python实现完整的事务操作示例
2017/06/20 Python
浅析python继承与多重继承
2018/09/13 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
python通过实例讲解反射机制
2019/10/17 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
12岁生日感言
2014/01/21 职场文书
房产授权委托书范本
2014/09/22 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers