1、方法定义

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、

Java代码  
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、

Java代码  
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、实现继承

Java代码  
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(); 

Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.

d、多重继承

Java代码  
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

转载于:https://www.cnblogs.com/cnblogs-jcy/p/6534780.html

Javascript中call()和apply()的用法 ----1相关推荐

  1. JavaScript中call()和apply()的用法及区别

    call(), apply()都属于Function.prototype的一个方法.它们有相同点也有不同点. 相同点: 1.产生的效果和作用是完全相同的: 2.至少有一个参数,第一个参数必须是一个对象 ...

  2. javascript中call和apply的区别和用法

    javascript中call和apply的区别和用法 1.call和apply是什么 更改对象的内部指针指向,即改变对象的this指向的内容 function Fn(){this.name='小明' ...

  3. javascript中call和apply的区别

    我理解javascript中call和apply的区别仅在于语法不同. 下例中分别调用call和apply对myObj进行修改,语法不同,但使用效果是一样的: var myObj = { " ...

  4. JavaScript中的call,apply,bind学习总结

    JavaScript 中的 call, apply, bind 这三个函数的作用和区别在各大论坛都被讨论了很多次了,但是我一直都还没来得及好好总结,这次正好看到了一个很不错的关于JavaScript ...

  5. JavaScript中call、apply个人理解

    JavaScript中call.apply个人理解 一句话即通俗的说:call.apply 是为了改变this的状态而存在的 var lisi = {name:'李四',age:23};var zs ...

  6. JavaScript中call和apply方法

    1 /* 2 在js中 call和apply常用于绑定作用域 3 */ 4 //1 简单的绑定 5 function sum(a,b){ 6 return a+b; 7 } 8 //将sum的功能绑定 ...

  7. JavaScript 中 call、apply和bind的用法区别

    ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已. 其实是一个很简单的东西,认真看十分钟就从一脸懵 ...

  8. JavaScript 中 call()、apply()、bind() 的用法

    其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例 1 obj.objAge; // 17 obj.myFun() // 小张年龄 undefined 例 2 sho ...

  9. JS(javascript)中this的几种用法实例详解

    本文主要介绍了javascript(以下简称js)中 this 用法,结合具体实例详细分析一下js中 this 的含义及使用方法,需要的朋友可以参考下. this 是 JavaScript 语言的一个 ...

  10. 详解javascript中的call, apply

    一些学js的同学一看到call, apply, 就蒙了, 感觉不好懂, 看的头大. 今天我们就一起来研究一下这2个东东. 彻底弄清楚它们的用法. 定义: call, apply是函数的方法, 只有函数 ...

最新文章

  1. 寒武纪宣布完成B轮融资 整体估值达25亿美元
  2. Java知多少(87)选择框和单选按钮(转)
  3. 面向过程与面向对象编程的区别和优缺点
  4. mysql 存储过程 嵌套if_mysql存储过程if嵌套if的写法
  5. feign 序列化_Spring Cloud Feign 配置 FastJson
  6. SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者
  7. python比较日期大小_Python日期的处理——datetime模块
  8. mysql date类型计算_MySQL date类型
  9. 关于预编绎网站的问题[已预编译此应用程序的错误]
  10. 说一下现在比较火的创业项目
  11. “赢在幻灯片”有奖征文启事
  12. Python中的jquery PyQuery库使用小结
  13. bbs与BLOG与SNS在区别
  14. Ubuntu 20.04 虚拟显示器 1080P 配置
  15. svn往分支提代码_[转]代码管理|svn分支管理
  16. 失败的过去式英文翻译_过去式用英语怎么说
  17. 手机格局再变,诺基亚和传音入前十,魅族和中兴出局
  18. 搭积木java,Jimu:像搭积木一样DIY原生Android App
  19. 甲骨文java计算机考证
  20. ValueError: The truth value of a DataFrame is ambiguous. Use a.empty 解决办法。(附 if 深层理解)

热门文章

  1. log4net 不生成日志文件的解决办法
  2. C#问题——interface class
  3. 【ACL2021】话题感知的语义建模
  4. 【GCN+KG】基于知识图谱和图卷积神经网络的应用和开发
  5. 【图像处理】图像去雾的前世今生
  6. 【哈工大SCIR Lab】Attention!注意力机制可解释吗?
  7. 【文本分类】几个可作为Baseline的模型
  8. 机器学习十大经典算法-KMeans
  9. k-近邻算法进行回归拟合
  10. 七年师大,青春永不毕业