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 函数的用法说明相关推荐

  1. JavaScript eval() 函数的用法

    定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 st ...

  2. javascript map函数的用法

    map()函数根据一个回调函数创建一个新的函数,它会遍历数组中的每一个值 例子 var arr1 = [1,3,5,6,8,19]const map1 = arr1.map(function(sing ...

  3. js中confirm()函数的用法

    javascript confirm()函数的用法 confirm():确认消息对话框.用于允许用户做选择的动作.弹出的对话框中包含一确定按钮和一取消按钮. confirm(str) 参数说明: st ...

  4. javaScript 中 call 函数的用法说明

    javaScript 中 call 函数的用法说明 javaScript 中的 call() 是一个奇妙的方法,但也是一个让人迷惑的方法,先看一下官方的解释: call 方法 请参阅 应用于:Func ...

  5. JavaScript中常见的字符串操作函数及用法汇总

    转载地址:http://www.jb51.net/article/65358.htm 这篇文章主要介绍了JavaScript中常见的字符串操作函数及用法,实例汇总了javascript常见的字符串转换 ...

  6. 为什么使用JavaScript eval函数是个坏主意?

    eval函数是一种动态生成代码的强大而简便的方法,那么有哪些警告? #1楼 我知道这个讨论很古老,但是我真的很喜欢Google的这种方法,并希望与他人分享这种感觉:) 另一件事是,您越了解越多,您就会 ...

  7. JavaScript中window.open用法实例详解

    本文较为详细的分析了JavaScript中window.open用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <script LANGUAGE="javascript& ...

  8. prototype.js常用函数及其用法

    prototype.js常用函数: 函数名  解释  举例  Element.toggle  交替隐藏或显示  Element.toggle(''div1'',''div2'')  Element.h ...

  9. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...

最新文章

  1. 教你如何更优惠的购买阿里云服务器?
  2. 【渝粤教育】国家开放大学2018年秋季 0553-21T色彩 参考试题
  3. mysql: order by, group by ,having, select, where 执行 顺序
  4. printf函数的格式修饰符
  5. 读论文:AlexNet
  6. Android控件Gallery 3D效果
  7. 四种平均数的数学公式
  8. 二次开发uniswap-01-SDK
  9. Wireshark用户使用手册系列完结篇
  10. Linux cat命令
  11. java竖线分割_用竖线字符(“ |”)分割字符串
  12. AR家居,随时随地在家“玩装修”!
  13. LiDARTag:一种基于点云的实时估计基准标记物位姿的系统
  14. 【单片机仿真】(六)寻址方式 — 变址寻址与相对寻址
  15. HTML网页设计:周杰伦网站
  16. 关于云计算必知的关键核心技术
  17. 人员管理KPI和OKR
  18. B/S、C/S与RIA
  19. ADG-12A-02-D2-1-52不带位置反馈比例换向阀放大器
  20. edius显示无法连接服务器,如何解决EDIUS安装过程中遇到的问题

热门文章

  1. laravel 导出导入excel和csv文件的 使用
  2. 180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则
  3. 20169207 2016-2017-2 《网络攻防实践》 黑客资料总结
  4. oracle使用sqlplus创建表空间
  5. SharePoint 如何检查一个SPWeb是否存在
  6. Tree 1.5 For Net 2.0
  7. Android LK Bootlaoder启动概览
  8. WIN7 64位系统搭建WINCE6.0系统遇到的问题
  9. WinCE内核裁减(中文字体)及字库和内核的分离(转)
  10. python sanic 向别的服务器发送post请求_Sanic框架请求与响应实例分析