apply和call它是javascript一个非常重要的方法,。虽然与程序平时很少接触,但JS到处都在使用这个框架2方法。

2个方法是在Function.prototype中。也就是说每一个JS函数都有这2个方法。

  1. alert(Function.prototype.hasOwnProperty("apply"));//true
  2. alert(Object.prototype.hasOwnProperty("apply"));//false

这2个函数完毕的功能是等价的。唯一的区别在于參数形式不同。

  1. function Person(name,age)
  2. {
  3. alert("name=" + name +",age="+age);
  4. }
  5.  
  6. Person.call({},"aty",10);
  7. Person.apply({},["aty",10]);

方法的具体介绍 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function

java中通过反射调用方法的代码例如以下:

  1. Method method = clazz.getDeclaredMethod("say");
  2. method.invoke(clazz.newInstance(),null);

能够看到:java反射方法调用与apply/call是非常相似的。Person相当于method,代表着调用什么方法。{}和clazz.newInstance()相似,代表调用哪个对象(即方法中的this),最后面是方法须要的參数列表。

我们知道在java中thiskeyword代表当前对象,我们无法改动。javascript中直接调用函数,跟java函数调用一样,this就代表当前对象。

假设想改动this。那么能够使用apply这样的方式。

aobj.afunction("1");

aobj.afunction.apply(bobj,["1"]);

第一种方式,函数中的this就是aobj,这是我们比較熟悉的做法;另外一种方式。函数中的this是bobj。

通过apply。对象bobj能够使用aobj中定义的方法。

  1. function FunctionA(name)
  2. {
  3. this.name=name;
  4. }
  5.  
  6. function FunctionB(name,age)
  7. {
  8.  
  9. FunctionA.apply(this,arguments);
  10. this.age=age;
  11. }
  12.  
  13. var bObj = new FunctionB("qq",11);

使用F12调试工具能够发现:bObj对象中有name和age属性。

版权声明:本文博主原创文章,博客,未经同意不得转载。

要理解javascript中间apply和call的更多相关文章

  1. 理解 JavaScript call()/apply()/bind()

    理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...

  2. 再次理解javascript的apply

    普通函数执行的时候,this指向函数执行的上下文  其实就是一个原型链的结构...    我一直没有搞懂原型链莫非它们像链条一样连在一起?    昂...   原型链可以理解成继承吗?   就像,ja ...

  3. javascript中apply、call和bind的区别,容量理解,值得转!

    a)  javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b)  深入浅出 妙用Javascrip ...

  4. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  5. 关于javascript中apply()和call()方法的区别

    如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语 ...

  6. 深入理解javascript原型和闭包(6)——继承

    为何用“继承”为标题,而不用“原型链”? 原型链如果解释清楚了很容易理解,不会与常用的java/C#产生混淆.而“继承”确实常用面向对象语言中最基本的概念,但是java中的继承与javascript中 ...

  7. 深入理解javascript原型和闭包(10)——this

    接着上一节讲的话,应该轮到“执行上下文栈”了,但是这里不得不插入一节,把this说一下.因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格. 其实,this的取值,分四种情 ...

  8. 图说js中的this——深入理解javascript中this指针

    没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 文章来源自——周陆军的个人网站:http://zhoulujun.cn/zhoulujun/html ...

  9. (转)深入浅出 妙用Javascript中apply、call、bind

    原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...

随机推荐

  1. 传感器仿真平台——UI绘制模块(二)

    这一章讲的是UI绘制模块 该模块的作用是将实验对象绘制出来,它可能是目标.传感器等等,由于事先并不知道会有哪些物体,也无法事先定义好某个对象该怎么画,以我懒人的性格,得了,就抛给用的人吧~喝前摇一摇, ...

  2. ajax请求webservice时抛出终止线程的异常

    请求webservice中以下接口,会抛出异常 {"Message":"正在中止线程.","StackTrace":" 在 Sys ...

  3. WebApi2官网学习记录---批量处理HTTP Message

    原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...

  4. unity音频组件

    unity 支持的四种音频格式: .AIFF  适用于较短的音乐文件可用作游戏打斗音效 .WAV  适用于较短的音乐文件可用作游戏打斗音效 .MP3  适用于较长的音乐文件可用作游戏背景音乐 .OGG ...

  5. C#如何获得本地电脑IP

    using System; using System.Collections.Generic; using System.Text; using System.Net;   //需要引用.Net命名空 ...

  6. IOC设计模式初步了解(day02)

    IOC(Inversion of Control):控制反转. *其他解释:依赖注入.依赖反转…… 设计目标:简化JEE的研发工作,提供IOC容器,控制bean的生成.注入,解耦. 看了网上的一些帖子 ...

  7. Java如何获取当前的jar包路径以及如何读取jar包中的资源

    写作业的时候要输出一个record.dat文件到jar包的同级目录,但是不知道怎么定位jar包的路径.百度到的方法不很靠谱,所以在这里记录一下. 一:使用类路径 String path = this. ...

  8. oracle 10g RAC psu过程

    1 升级crs 至10.2.0.5.2 1) 升级opatch 程序,PSU对opatch的版本有要求,详见readme文件,此步操作共涉及到每个节点的ORACLE_HOME和ORA_CRS_HOME ...

  9. 慕课linux学习笔记(五)常用命令(2)

    链接命令 Ln [原文件] [目标文件] -s 表示创建软链接 硬链接特征: 拥有相同的i节点和存储block块,可以看做是同一个文件 通过i节点识别 不能跨分区 不能针对目录用 软链接特征: 不同的 ...

  10. Oracle11g R2学习系列 之三教程选择

    工欲善其事必先利其器,选择一本入门教程也是很重要的,本人使用的也是这位同事推荐的电子工业出版社的<<Oracle 实用教程(第3版)>>郑阿奇主编,可以至这里购买到,我个人还是 ...