javascript基于原型链的继承及call和apply函数用法分析
发布时间 - 2026-01-10 21:50:12 点击率:次本文实例讲述了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原理实例解析
# 面向对象
# 的是
# 都是
# 是一个
# 是在
# 这种方法
# 也会
# 相关内容
# 则是
# 两种
# 可以用
# 而来
# 遍历
# 不多
# 中有
# 上有
# 数据结构
# 可以通过
# 给大家
# 这种情况
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
香港服务器部署网站为何提示未备案?
如何快速使用云服务器搭建个人网站?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
实例解析angularjs的filter过滤器
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel中的Facade(门面)到底是什么原理
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel怎么实现模型属性的自动加密
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
jQuery validate插件功能与用法详解
Laravel如何实现模型的全局作用域?(Global Scope示例)
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
历史网站制作软件,华为如何找回被删除的网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
简单实现jsp分页
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
图册素材网站设计制作软件,图册的导出方式有几种?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
微信推文制作网站有哪些,怎么做微信推文,急?
HTML 中动态设置元素 name 属性的正确语法详解
制作公司内部网站有哪些,内网如何建网站?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
浅谈Javascript中的Label语句
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Python并发异常传播_错误处理解析【教程】
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Python3.6正式版新特性预览
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Python自动化办公教程_ExcelWordPDF批量处理案例
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何在服务器上三步完成建站并提升流量?
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Bootstrap整体框架之CSS12栅格系统
C语言设计一个闪闪的圣诞树
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
如何在宝塔面板中创建新站点?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧

