javaScript call 函数的用法说明
javaScript 中的 call() 是一个奇妙的方法,但也是一个让人迷惑的方法,先看一下官方的解释。
call 方法
请参阅
应用于:Function 对象
要求
版本 5.5
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
-------------------------------------------------------------------------------------------
乍一看,很容易把人看迷胡,先做一些简单的说明
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入.
举一个具体的例子
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 对象的引用。
看一个稍微复杂一点的例子
function Class1()
{
this.name = "class1";
this.showNam = function()
{
alert(this.name);
}
}
function Class2()
{
this.name = "class2";
}
var c1 = new Class1();
var c2 = new Class2();
c1.showNam.call(c2);
注意,call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2");
怎么样,觉得有意思了吧,可以让a对象来执行b对象的方法,这是java程序员所不敢想的。还有更有趣的,可以用 call 来实现继承
function Class1()
{
this.showTxt = function(txt)
{
alert(txt);
}
}
function Class2()
{
Class1.call(this);
}
var c2 = new Class2();
c2.showTxt("cc");
这样 Class2 就继承Class1了,Class1.call(this) 的 意思就是使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”);
对的,就是这样,这就是 javaScript 如何来模拟面向对象中的继承的,还可以实现多重继承。
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,这个和call的 用法就不同了,放到下次讲吧 ,呵呵。
javaScript call 函数的用法说明相关推荐
- JavaScript eval() 函数的用法
定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 st ...
- javascript map函数的用法
map()函数根据一个回调函数创建一个新的函数,它会遍历数组中的每一个值 例子 var arr1 = [1,3,5,6,8,19]const map1 = arr1.map(function(sing ...
- js中confirm()函数的用法
javascript confirm()函数的用法 confirm():确认消息对话框.用于允许用户做选择的动作.弹出的对话框中包含一确定按钮和一取消按钮. confirm(str) 参数说明: st ...
- javaScript 中 call 函数的用法说明
javaScript 中 call 函数的用法说明 javaScript 中的 call() 是一个奇妙的方法,但也是一个让人迷惑的方法,先看一下官方的解释: call 方法 请参阅 应用于:Func ...
- JavaScript中常见的字符串操作函数及用法汇总
转载地址:http://www.jb51.net/article/65358.htm 这篇文章主要介绍了JavaScript中常见的字符串操作函数及用法,实例汇总了javascript常见的字符串转换 ...
- 为什么使用JavaScript eval函数是个坏主意?
eval函数是一种动态生成代码的强大而简便的方法,那么有哪些警告? #1楼 我知道这个讨论很古老,但是我真的很喜欢Google的这种方法,并希望与他人分享这种感觉:) 另一件事是,您越了解越多,您就会 ...
- JavaScript中window.open用法实例详解
本文较为详细的分析了JavaScript中window.open用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <script LANGUAGE="javascript& ...
- prototype.js常用函数及其用法
prototype.js常用函数: 函数名 解释 举例 Element.toggle 交替隐藏或显示 Element.toggle(''div1'',''div2'') Element.h ...
- js中bind、call、apply函数的用法
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...
最新文章
- 教你如何更优惠的购买阿里云服务器?
- 【渝粤教育】国家开放大学2018年秋季 0553-21T色彩 参考试题
- mysql: order by, group by ,having, select, where 执行 顺序
- printf函数的格式修饰符
- 读论文:AlexNet
- Android控件Gallery 3D效果
- 四种平均数的数学公式
- 二次开发uniswap-01-SDK
- Wireshark用户使用手册系列完结篇
- Linux cat命令
- java竖线分割_用竖线字符(“ |”)分割字符串
- AR家居,随时随地在家“玩装修”!
- LiDARTag:一种基于点云的实时估计基准标记物位姿的系统
- 【单片机仿真】(六)寻址方式 — 变址寻址与相对寻址
- HTML网页设计:周杰伦网站
- 关于云计算必知的关键核心技术
- 人员管理KPI和OKR
- B/S、C/S与RIA
- ADG-12A-02-D2-1-52不带位置反馈比例换向阀放大器
- edius显示无法连接服务器,如何解决EDIUS安装过程中遇到的问题
热门文章
- laravel 导出导入excel和csv文件的 使用
- 180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则
- 20169207 2016-2017-2 《网络攻防实践》 黑客资料总结
- oracle使用sqlplus创建表空间
- SharePoint 如何检查一个SPWeb是否存在
- Tree 1.5 For Net 2.0
- Android LK Bootlaoder启动概览
- WIN7 64位系统搭建WINCE6.0系统遇到的问题
- WinCE内核裁减(中文字体)及字库和内核的分离(转)
- python sanic 向别的服务器发送post请求_Sanic框架请求与响应实例分析