javascript基于原型链的继承及call和apply函数用法分析


Posted in Javascript onDecember 15, 2016

本文实例讲述了javascript基于原型链的继承及call和apply函数用法。分享给大家供大家参考,具体如下:

1. 继承是面向对象编程语言的一个重要特性,比如Java中,通过extend可以实现多继承,但是JavaScript中的继承方式跟JAVA中有很大的区别,JS中通过原型链的方式实现继承。

(1)对象的原型:因为JS中,函数也是对象,因此我们先从对象出发。什么是对象的原型,原型的定义为:

所有通过对象直接量创建的对象都具有同一个函数原型,并且可以通过Object.prototype获得对原型对象的引用,通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。

注:没有原型的对象不多,Object.prototype对象是没有原型的。

(2)创建对象的原型

比如这里有一个Student对象和一个Person对象,其中,Student.prototype指向Person.prototype

对于创建对象完全不同的两种方法:

i)Student.prototype=Person.prototype

这种方法,创建Student的prototype对象,如果改变Student.prototype的值的时候,Person.prototype也会同时改变,为了避免这种情况,我们应采用其他方式;

ii)Student.prototype=Object.create(Person.prototype)

这种方法,创建的Student的Prototype对象,在改变Student.prototype的属性或者方法时,不会同时去改变Person.prototype的属性。

(3)基于继承的赋值操作

例1:

var o={
  x:1
}
o.x=2;
alert(o.x);//输出o.x=2

例2:

var o={
  x:1
}
var osp=Object.create(o);
alert(osp.x);//输出1
osp.x=2;
alert(osp.x);//输出2

i)从上面的两个例子中,我们大概可以看出来,如果对象osp上有x属性,那么无论是取值,还是赋值,都是基于osp对象上的直接属性x,如果osp对象上没有x属性,那么会沿着prototype原型链查找,直到找到一个包含x属性的prototype属性链上的对象,如果osp对象所有prototype原型链上都没有包含x属性,那么返回underfined。

ii)o对象属性的赋值,被视为在osp对象上直接进行,不会影响原型链上的属性。比如上例中的osp.x=2的赋值是在osp对象上,不会影响osp的原型对象o。

2. 举一些对象中继承的例子

(1)我们学过可以用instanceof来进行类型判断,instanceof方法本来就是基于原型链的。

比如例3:

[1,2] instanceof Array    //返回true
[1,2] instanceof Object   //返回true

这个例子说明Array.prototype也是继承于对象而来。

(2)函数中的组合继承问题

function student(name,age){
  this.name=name;
  this.age=age;
}
student.prototype.age=function(){
  return this.age;
}
function beststudent(name,age){
  student.call(this,age);
  return this.name;
}
beststudent.prototype=new student();
  alert(beststudent("yu",2))//输出2
}

3. call函数和apply函数

call函数和apply函数用于改变函数中this的指向,用于对象A调用对象B的方法,call函数和apply函数的区别在于传参的类型不同,apply(x,y),x表示的是执行函数的对象,而y则表示执行函数所需要调用的参数,是一个数组,并且可以传参为argument数组,而call(x,y)中的y之后的变量则是实实在在的变量;

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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

Javascript 相关文章推荐
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
使用简洁的jQuery方法实现隔行换色功能
Jan 02 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
js使用cookie记录用户名的方法
Nov 26 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
Feb 15 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
使用jquery如何获取时间
Oct 13 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
前端Vue项目详解--初始化及导航栏
Jun 24 Javascript
移动端脚本框架Hammer.js
Dec 15 #Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 #Javascript
浅谈javascript alert和confirm的美化
Dec 15 #Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 #Javascript
原生JS实现图片轮播切换效果
Dec 15 #Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 #Javascript
利用vue写todolist单页应用
Dec 15 #Javascript
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python多继承顺序实例分析
2018/05/26 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
Python 求数组局部最大值的实例
2019/11/26 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
关于Keras Dense层整理
2020/05/21 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
简历中个人自我评价分享
2014/03/15 职场文书
个人授权委托书
2014/04/03 职场文书
意向协议书范本
2014/04/23 职场文书
外贸业务员求职信
2014/06/16 职场文书
员工自我工作评价
2015/03/06 职场文书
采购内勤岗位职责
2015/04/13 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript