`

JavaScript之Function的apply与call

阅读更多

JavaScript函数调用分为4中模式:

1. 方法调用模式:即对象包含方法属性,Obj.methodName()或者Obj[methodName]()

2. 函数调用模式:即methodName()

3. 构造器调用模式:即new MethodName()

4. applycall调用模式:即ObjA.apply(ObjB,args[])或者ObjA.call(ObjB,arg1,arg2...)

函数调用时,除了接收形式参数外,还会接收thisarguments。其中this为函数对象上下文,arguments为实际参数。

applycall实现同样的功能,即切换函数对象的上下文(this指向的引用),区别在于形式参数不一样。applyarguments或者数组,call为以逗号隔开多个单独形式参数。

function add(c)
{
   alert(this.a+this.b+c);
}
var test={a:1,b:2}
add.call(test,3); 

 在执行add.call(test,3); 之前add和test都属于window下,此时this指向window。add.call(test,3); 执行时,进入add方法体,此时this由window切换为test,此时this.a=test.a,this.b=test.b,c为形式参数传入的值,即alert()的结果为1+2+3=6。apply也是一样的功能。

 

通过apply和call实现扩展和继承:

 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函数体的this由window切换为Cat{},
// Animal函数体的this.name通过形式参数传入即为Black Cat,最终cat
 //得到的结果为cat=Cat{name:"Black Cat",showName: function(){ alert(this.name);},
 cat.showName();//执行时this由window切换为
 //Cat{name:"Black Cat",showName: function(){ alert(this.name);} 此时this.name
 //为this.name=Cat.name,因此为Black Cat。

 

分享到:
评论

相关推荐

    JavaScript中函数(Function)的apply与call理解

    主要介绍了JavaScript中函数(Function)的apply与call理解,本文讲解了JavaScript函数调用分为4中模式以及通过apply和call实现扩展和继承两方面,需要的朋友可以参考下

    javascript中apply和call方法的作用及区别说明

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...

    开启Javascript中apply、call、bind的用法之旅模式

    在Javascript中,Function是一种对象。Function对象中的this指向决定于函数被调用的方式,使用apply,call 与 bind 均可以改变函数对象中this的指向。

    JavaScript中apply与call的用法意义及区别说明

    apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型...

    JavaScript中的apply和call函数详解

    Function.apply and Function.call in JavaScript 第一段略。 每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。听起来,你是否会感到奇怪,一个函数可能会有属于它自己的...

    apply和call方法定义及apply和call方法的区别

    如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而...call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实

    简单对比分析JavaScript中的apply,call与this的使用

    简单的说call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的...

    javascript中call apply 的应用场景

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.

    彻底搞懂JavaScript中的apply和call方法(必看)

    call和apply都是为了改变某个函数运行的context上下文而存在的,即为了改变函数体内部this的指向。因为JavaScript的函数存在定义上下文和运行时上下文以及上下文是可以改变的概念。 回到目录定义 fun.apply(thisArg...

    javascript中call apply 与 bind方法详解

    在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 ...

    Javascript中apply、call、bind的巧妙使用

    在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。 JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文...

    全面解析JavaScript中apply和call以及bind(推荐)

    在谈论JavaScript中apply、call和bind这三兄弟之前,我想先说下,函数的调用方式有哪些: •作为函数 •作为方法 •作为构造函数 •通过它们的call()和apply()方法间接调用 前面的三种调用方法,我们都知道且不...

    JavaScript 中 apply 、call 的详解

    ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已。 apply( ) apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是...

    js中apply与call简单用法详解

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是...

    Javascript 中的 call 和 apply使用介绍

    简单的说就是改变函数执行的上下文,... 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 代码如下: function Person(name,age){ this.name = name; this.age=age; this.alertName = f

    Javascript中call,apply,bind方法的详解与总结

    1.call/apply/bind方法的来源 2.Function.prototype.call() 3.Function.prototype.apply()  3.1:找出数组中的最大数  3.2:将数组的空元素变为undefined  3.3:转换类似数组的对象 4.Function.prototype.bind() ...

    javascript中apply、call和bind的使用区别

    在说区别之前还是先总结一下三者的相似之处: 1、都是用来改变函数的this对象的指向的。 2、第一个参数都是this要指向的对象。 3、都可以利用后续参数传参。 那么他们的区别在哪里的,先看一个例子。 var xw = { ...

    深入理解JavaScript中的call、apply、bind方法的区别

    在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply 和bind这三个方法,来改变函数体内部 this 的...

    javascript中call,apply,bind函数用法示例

    本文实例讲述了javascript中call,apply,bind函数用法。分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 ...

Global site tag (gtag.js) - Google Analytics