简明易懂的call apply
在iteye看到一篇对call解释得相当简明易懂,觉得得宣传一下 : http://uule.iteye.com/blog/1158829
一、方法的定义
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
2、常用实例
a例
function add(a,b) {alert(a+b); } function sub(a,b) {alert(a-b); }add.call(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
b例
function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 //输入结果为"Cat" animal.showName.call(cat,","); //animal.showName.apply(cat,[]);
call 的意思是把 animal 的方法放到cat上执行,原来cat是没有showName() 方法,现在是把animal 的showName()方法放到 cat上来执行,所以this.name 应该是 Cat
c、实现继承
function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName();
d、多重继承
function Class10() {this.showSub = function(a,b){alert(a-b);} }function Class11() {this.showAdd = function(a,b){alert(a+b);} }function Class2() {Class10.call(this);Class11.call(this); }
很简单,使用两个 call 就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments
还有 callee,caller..
例子来源:http://xiaofeizm55333.iteye.com/blog/80913
http://www.iteye.com/topic/599108 及回复..
转载于:https://www.cnblogs.com/mofish/p/3507861.html
简明易懂的call apply相关推荐
- Adaboost算法原理分析和实例+代码(简明易懂)
Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333 ...
- 简明易懂的c#入门指南_统计假设检验的简明指南
简明易懂的c#入门指南 介绍 (Introduction) One of the main applications of frequentist statistics is the comparis ...
- 《人人都能玩赚ChatGPT》:一份简明易懂的 ChatGPT 技术指南
在科技日新月异的时代,人工智能无疑成为了当之无愧的热点话题.对于许多对前沿技术感兴趣的人来说,掌握聊天机器人技术似乎是一个遥不可及的梦想.然而,一本名为<人人都能玩赚ChatGPT>的书籍 ...
- 一种简明易懂的专利侵权分析报告表单样式
作者:星耀-NEIL.HU 在企业知识产权管理中,企业专利工程师的一项非常重要的日常工作是对企业研发过程中涉及的新产品或新技术进行专利侵权风险评估,这是一项涉及技术.专利检索.翻译.分析与风险预警等的 ...
- 简明易懂的JVM垃圾回收理解
文章目录 写在前面 垃圾回收(GC)的概念 垃圾回收判断 垃圾回收区域 对象是否可以被回收 垃圾回收搜索根 GC Roots 安全点 Safepoint 垃圾回收的时刻 垃圾回收算法 标记-清除算法 ...
- 教你怎么用Python和Qt5编写中国象棋AI版——简明易懂版
教你怎么用Python和Qt5编写中国象棋AI版--简明易懂版 一.前言 二.中国象棋的几个模块--作者认为的 三.各模块大致实现思路 四.最后 一.前言 大家学习Python是否有过编写一个稍微大型 ...
- 全球化文案设计: 简明易懂、四海达意
△ 插图由 Alexa Ong (Next Billion Users 插画师) 提供 作者 / Susanna Zaraysky, Content Strategist, Google 我在 Luk ...
- 【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)
一.易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序.中序. ...
- 计算机电源简单知识,简明易懂 图解电源工作原理
同学们,今天我们来学习一堂关于电源工作原理的课.因为是针对新手的知识普及课,所以在下会用朴实的语言尽量的把这堂课讲得通俗.简单.易懂一些.如果有专业大师级别的看客路过的话,还望多多交流. 我们先来讲讲 ...
最新文章
- eclipse运行maven web项目
- idea窗口下方滚动条不明显设置
- ibatis mysql 配置文件详解_MyBatis配置文件详解
- go c 语言,c语言与go语言的区别有哪些
- 柱状图表制作如此简单,比阿里云DataV更好用的数据可视化平台
- php mail 标题乱码
- Arcgis中修改属性字段名
- 用C语言打印一个菱形图案!
- 王家林人工智能AI 第七节课:四种性能优化Matrix编写AI框架实战(Gradient Descent的陷阱、及几种常见的性能优化方式实战)老师微信13928463918
- 互联网史上10大经典商战
- 【C++】vector的基本使用
- 前端项目如何使用svg矢量图
- python电玩城源码_2019最新最全价值2W的微信H5电玩城游戏全套源码+架设教程+配置文档...
- 迟来的年度总结 —— 我与 csdn 的故事
- 雨林木风 Ghost XP SP2 纯净版 Y3.0
- C20_OC10-内存管理
- 传奇服务器包裹元宝数量显示,GOM传奇服务端测试记录元宝,传奇GM版本库测试区记录元宝数量教程...
- 7-1 计算π的值 (10分)_PTA_Java基础练习
- 知网、维普、万方文献一网打尽免费下载,亲测好用哦!
- pandas数据处理基础——筛选指定行或者指定列的数据
热门文章
- 电脑上交计算机作业怎么打开,上海交大计算机第一次作业-20210711011739.docx-原创力文档...
- 腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里
- Apprentissage du français partie 3
- python的固定有没有固定字符_python每次处理固定个数的字符的方法总结
- 一加桌面3.0 android8,一加手机XRemix6.0安卓8.1.0Beta2.0定制本地化增强适配归属农历等...
- redhat下的iptables和firewalld 笔记
- HTML+CSS+JS实现 ❤️canvas 3D立体图片相册幻灯片❤️
- oracle删除排序数据库,数据库的数据操作:增删改查和排序
- python输出国际象棋棋盘_python输出国际象棋棋盘的实例分享
- mysql timestamp类型比较_MySQL timestamp 类型比较的测试