首页 > 代码库 > 了解javascript中的apply和call
了解javascript中的apply和call
apply和call是javascript中很重要的方法,虽然平时编程很少接触到,但是JS框架中到处在使用这2个方法。
这2个方法是在Function.prototype中,也就是说每个JS函数都有这2个方法。
alert(Function.prototype.hasOwnProperty("apply"));//true alert(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属性。
了解javascript中的apply和call
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。