全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

本文实例讲述了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  # 原型链  # 继承  # call  # apply  # 函数  # 详解JavaScript函数callee、call、apply的区别  # JavaScript函数apply()和call()用法与异同分析  # JS中call和apply函数用法实例分析  # javascript中call  # bind函数用法示例  # JavaScript中函数(Function)的apply与call理解  # Javascript中call和apply函数的比较和使用实例  # 从JQuery源码分析JavaScript函数的apply方法与call方法  # JavaScript中的apply和call函数详解  # JavaScript函数Call、Apply原理实例解析  # 面向对象  # 的是  # 都是  # 是一个  # 是在  # 这种方法  # 也会  # 相关内容  # 则是  # 两种  # 可以用  # 而来  # 遍历  # 不多  # 中有  # 上有  # 数据结构  # 可以通过  # 给大家  # 这种情况 


相关文章: 齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Android滚轮选择时间控件使用详解  如何获取上海专业网站定制建站电话?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  行程制作网站有哪些,第三方机票电子行程单怎么开?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  建站OpenVZ教程与优化策略:配置指南与性能提升  如何在橙子建站上传落地页?操作指南详解  如何用PHP工具快速搭建高效网站?  海南网站制作公司有哪些,海口网是哪家的?  建站之星CMS五站合一模板配置与SEO优化指南  建站之星后台密码遗忘或太弱?如何重置与强化?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何在香港服务器上快速搭建免备案网站?  如何确保FTP站点访问权限与数据传输安全?  贸易公司网站制作流程,出口贸易网站设计怎么做?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站之星安装路径如何正确选择及配置?  Android使用GridView实现日历的简单功能  网站制作需要会哪些技术,建立一个网站要花费多少?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星logo尺寸如何设置最合适?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  专业公司网站制作公司,用什么语言做企业网站比较好?  如何通过FTP空间快速搭建安全高效网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  公司门户网站制作流程,华为官网怎么做?  建站主机服务器选购指南:轻量应用与VPS配置解析  营销式网站制作方案,销售哪个网站招聘效果最好?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何选择最佳自助建站系统?快速指南解析优劣  网站图片在线制作软件,怎么在图片上做链接?  Python lxml的etree和ElementTree有什么区别  如何高效配置IIS服务器搭建网站?  如何彻底卸载建站之星软件?  如何在IIS服务器上快速部署高效网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  电商网站制作公司有哪些,1688网是什么意思?  如何获取开源自助建站系统免费下载链接?  制作门户网站的参考文献在哪,小说网站怎么建立?  如何基于PHP生成高效IDC网络公司建站源码?  建站之星与建站宝盒如何选择最佳方案?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何在景安云服务器上绑定域名并配置虚拟主机?  常州企业建站如何选择最佳模板?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  高防服务器租用指南:配置选择与快速部署攻略  天津个人网站制作公司,天津网约车驾驶员从业资格证官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。