不同的定义
- JavaScript函数或者说是对象中定义的函数可以动态的绑定到另一个函数中,即即使函数f2中未定义函数f1中的子函数ff1,f2也可以调用ff1,apply与call可以实现这种用法。
- JavaScript对apply和call的解释是:使用指定对象替换当前对象并调用函数。
- apply和call:它们的作用都是将函数绑定到另外一个对象上去运行
,两者仅在定义参数上不同。
详细介绍
JavaScript动态变换运行时上下文特性,这种特性主要就体现在apply, call两个方法的运用上.
call,
apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于
Function.prototype,所以每个Function对象实例,也就是每个方法都有call,
apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.
区分apply,call就一句话,
foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)
相同点:两个方法产生的作用是完全一样的
不同点:方法传递的参数不同
我们就上面的foo.call(this, arg1, arg2, arg3)展开分析.
foo是一个方法,this
是方法执行时上下文相关对象
,arg1, arg2, arg3是传给foo方法的参数.这里所谓的方法执行时上下文相关对象, 如果有面向对象的编程基础,那很好理解,就是在类实例化后对象中的this.
在JavaScript中,代码总是有一个上下文对象,代码处理该对象之内. 上下文对象是通过this变量来体现的, 这个this变量永远指向当前代码所处的对象中.
引用网上一个代码段,运行后自然就明白其道理。
<input type="text" id="myText" value="input text">
<script>
function Obj(){this.value="对象!";}
var value="global 变量";
function Fun1(){alert(this.value);}
window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //对象!
</script>
call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:
<script>
var func=new function(){this.a="func"}
var myfunc=function(x){
var a="myfunc";
alert(this.a);
alert(x);
}
myfunc.call(func,"var");
</script>
可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。
这就是动态语言 JavaScript call的威力所在!
参考资料
http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html
http://www.cnblogs.com/cc258/archive/2012/04/21/2462547.html
http://www.spacespace.cn/read.php?153
分享到:
相关推荐
JavaScript中call与apply方法
淡淡简单描述javascript中方法apply和call
javascript中apply、call和bind的用法区分_.docx
JavaScript中的apply和call函数详解_.docx
一、call和apply的说明 1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为...
javascript callApply代码示例
理解JavaScript的caller callee call apply
本文主要介绍了javascript中apply/call和bind的使用。具有很好的参考价值,下面跟着小编一起来看下吧
深化理解关于javascript中apply()和call()方法的区分_.docx
apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型...
NULL 博文链接:https://ufoqhmdt.iteye.com/blog/1676748
下面小编就为大家带来一篇javascript中apply、call和bind的使用区别。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在Javascript中,Function是一种对象。Function对象中的this指向决定于函数被调用的方式,使用apply,call 与 bind 均可以改变函数对象中this的指向。
主要介绍了JavaScript中函数(Function)的apply与call理解,本文讲解了JavaScript函数调用分为4中模式以及通过apply和call实现扩展和继承两方面,需要的朋友可以参考下
javascript技术难点(三)之this、new、apply和call详解
在javascript中apply、call和bind是三兄弟,很好的搭档,下面小编给大家全面解析JavaScript中apply和call以及bind的相关知识,感兴趣的朋友一起学习吧
1.apply定义 apply:调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数。 语法:apply([thisObj[,argArray]]) thisObj 可选。要用作 this 对象的对象。 argArray 可选。要传递到函数的一组...
Javascript中apply、call、bind都是为了改变函数体内部 this 的指向。下面通过本文重点给大家介绍js中apply,call,bind的巧妙使用方法,感兴趣的朋友一起学习吧
简单的说就是改变函数执行的上下文,... 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 代码如下: function Person(name,age){ this.name = name; this.age=age; this.alertName = f