了解javascript中的apply和call
来源:互联网 发布:editplus java 编辑:程序博客网 时间:2024/05/18 02:51
apply和call是javascript中很重要的方法,虽然平时编程很少接触到,但是JS框架中到处在使用这2个方法。
这2个方法是在Function.prototype中,也就是说每个JS函数都有这2个方法。
alert(Function.prototype.hasOwnProperty("apply"));//truealert(Object.prototype.hasOwnProperty("apply"));//false
这2个函数完成的功能是等价的,唯一的差别在于参数形式不同。
function Person(name,age){ alert("name=" + name +",age="+age);}Person.call({},"aty",10);Person.apply({},["aty",10]);
方法的详细介绍 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function
java中通过反射调用方法的代码如下:
Method method = clazz.getDeclaredMethod("say");method.invoke(clazz.newInstance(),null);
可以看到:java反射方法调用与apply/call是很相似的。Person相当于method,代表着调用什么方法;{}和clazz.newInstance()相似,代表调用哪个对象(即方法中的this),最后面是方法需要的参数列表。
我们知道在java中this关键字代表当前对象,我们无法修改;javascript中直接调用函数,跟java函数调用一样,this就代表当前对象。
如果想修改this,那么可以使用apply这种方式。
aobj.afunction("1");
aobj.afunction.apply(bobj,["1"]);
第一种方式,函数中的this就是aobj,这是我们比较熟悉的做法;第二种方式,函数中的this是bobj。
通过apply,对象bobj可以使用aobj中定义的方法。
function FunctionA(name) { this.name=name; } function FunctionB(name,age) { FunctionA.apply(this,arguments); this.age=age; } var bObj = new FunctionB("qq",11);
使用F12调试工具可以发现:bObj对象中有name和age属性。
1 0
- 了解javascript中的apply和call
- JavaScript中的call和apply
- JavaScript中的call和apply
- javascript中的apply和call
- JavaScript中的call和apply
- javascript中的apply和call
- javascript中的call和apply
- Javascript中的apply和call
- JavaScript中的apply和call
- JavaScript中的call和apply
- javascript 中的call 和apply
- JavaScript中的call、apply
- javascript中的call和apply方法
- javascript 中的call和apply实例
- Study《javaScript中的call和apply》
- javascript 函数中的apply()和call()方法。
- javascript中的call和apply函数
- javascript中的call和apply方法
- 函数指针和指针函数的区别
- cocos2dx物理引擎和碰撞检测(一)
- 数据结构 第三章 栈和队列
- codevs 1365 浴火银河星际跳跃 题解
- cmd中编译java文件
- 了解javascript中的apply和call
- Java 堆内存
- StrStrI 与 strstr
- HDU 2570 迷障 贪心
- In App Purchases(IAP 应用程序內购买): 完全攻略
- Android UI线程和非UI线程
- 关于fd的close on exec(非常重要)
- linux下ftp服务器vsftpd服务的安装与配置
- codeforces Round #263(div2) E解题报告