`
zhiheng1001319
  • 浏览: 4044 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

call和apply的用法

阅读更多

call和 apply 可以看做是某个对象的方法,通过调用方法的形式来间接的调用函数.

call apply的第一个参数是要调用函数的母对象,它是调用的上下文,在函数体内通过this对它的引用。

For example:

要想以对象obj的方法来调用函数f

则为:f.call(obj) || f.apply(obj);

这段代码等价于:

obj.method=f  //f存储为obj的临时方法

obj.method()  //调用它,不传入参数

Ecmascript5严格模式中call()apply()的第一个参数都会变成this的值,哪怕传入的实参的类型是null || undefined 都会被全局对象代替,其它的原始值则会被相应的包装对象所替代.

a:对于call来说 第一个调用上下文实参之后的所有实参就是要传入待调用函数的值。

For example:

以对象obj的方法的形式调用函数f(),并传入两个参数:

f.call(obj,1,2);

b:apply()方法与call()方法类似,但传入的参数的形式有点不同,apply的参数都是放在一个数组中.

`For example:

F.call(obj,[1,2]);

如果一个参数的数量可以使任意数量个,则给apply()传入的参数数组可以是任意长度的.

**注意:apply()的参数数组可以使对象数组,也可以是真实数组**,可以将当前函数的arguments数组直接传入另一个函数的apply()来调用另一个函数.

  For example:

//把对象obj中的名为f的方法替换成另一个方法

//可以在调用原始的方法之前和之后记录日志消息 

function trace(obj,f){

  var original=obj[f];//在闭包中保存原始的方法

  obj[f]=function(){

  console.log(new date(),Entering,f);//输出日志消息

  var result=original.apply(this,arguments);//偷梁换柱调用原始函数

  console.log(new date(),Exting,f);//输出日志消息

  return result; 

  };

}

分享到:
评论

相关推荐

    关于Javascript中call与apply的进一步探讨

    在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...

    js中call与apply的用法小结

    在这里,`childA`通过`baseA.call(this)`调用父类的构造函数,使得`childA`实例也能访问到`baseA`的方法和属性。 ### 5. 改进的继承模式 在实际开发中,更常见的继承模式是组合使用`call`和原型链,如经典继承模式...

    call与apply区别 详细解读.pdf

    call和apply是JavaScript中的两个重要方法,它们都是Function.prototype中的方法,这意味着每个函数都可以使用这两个方法。它们的作用是改变函数体内的this对象的值,以扩充函数赖以运行的作用域。 相同点:call和...

    理解JavaScript的caller callee call apply

    `call`和`apply`是`Function.prototype`上的两个方法,它们允许开发者以不同的上下文(`this`值)调用函数,并提供参数。这两个方法的主要区别在于参数的传递方式: 1. **`call`方法**:接收一个`this`值作为第一个...

    js中call与apply的用法小结.docx

    例如,`extendAB`函数可以通过`call`或`apply`调用来继承`baseA`和`baseB`的属性和方法。在提供的继承示例中,`baseA.call(this)`和`baseB.apply(this, arguments)`分别将`baseA`和`baseB`的构造函数调用上下文设为`...

    JS中的call、apply、bind方法详解.pdf

    1. call和apply的区别在于传递参数的方式,call方法需要一个一个传递参数,而apply方法则直接传递一个数组。 2. call和apply方法直接执行函数,而bind方法需要再次调用。 3. bind方法返回一个新的函数,而call和...

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

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

    详解js中call与apply关键字的作用

    ### call和apply的作用与用法 1. **改变this指向**:当函数需要在特定的对象上下文中执行时,可以使用call或apply。例如,在全局函数中,this默认指向window,但有时我们希望它指向另一个对象。此时,call和apply就...

    浅谈javascript中的call、apply、bind_.docx

    apply 方法和 call 方法的唯一区分是其次个参数的传递方式不同,apply 的其次个参数必需是一个数组,而 call 允许传递一个参数列表。值得注意的是,虽然 apply 接收的是一个参数数组,但在传递给调用函数时,却是以...

    javascript中call和apply方法浅谈

    在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向,实现函数的...在实际开发中,理解和熟练掌握`call`和`apply`方法对于编写高效、灵活的JavaScript代码至关重要。

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

    本文针对JavaScript中三个重要的函数方法——call、apply和bind,进行详尽的分析,并在文章的结尾部分对这三个方法之间的联系和区别进行了概括,以便于读者更深入地理解它们的用途和应用场景。 首先,我们来探讨...

    JS中的call()和apply()方法的详解

    每个函数都包含两个非继承而来的方法:call() 方法和 apply() 方法 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,一般来说,this总是指向调用某个方法的对象,但是使用...

    Javascript 中的 call 和 apply使用介绍

    apply方法和call方法类似,也是用来指定函数内this的指向。不同之处在于apply接受第二个参数,这个参数必须是数组或者类数组对象,数组中的每个元素分别对应原函数的参数。 当我们谈论到类的继承时,call和apply能...

    Js的call与apply1

    首先,让我们深入理解`call`和`apply`的基本用法。`call`接收两个参数:第一个参数是希望作为`this`值的对象,后续参数以逗号分隔的形式传入函数;`apply`同样接收第一个参数作为`this`值,但它第二个参数是一个数组...

    详解js中call与apply关键字的作用.docx

    JavaScript中的`call`和`apply`是两种非常重要的方法,它们都用于改变函数内部`this`的指向,并执行该函数。这两个方法都是Function对象的原型方法,因此所有的函数都具备`call`和`apply`。 1. `call`方法: - `...

    JavaScript 学习笔记(九)call和apply方法

    1. 临时借用方法:当一个对象需要使用另一个对象的方法,但不希望改变当前对象的this指向时,可以通过call和apply方法实现。 2. 继承实现:通过call或apply可以实现JavaScript中的类继承。如果子类继承父类,那么...

    js中call,apply,setCapture,releaseCapture的使用.pdf

    JavaScript中的`call`和`apply`是两种函数调用的方式,它们主要用于改变函数内部的`this`指向。`call`方法允许你将一个函数绑定到指定的上下文(即`this`值)并立即调用,它接受一个或多个参数,参数列表直接跟在...

    JS中call和apply函数用法实例分析

    如果确实需要继承,应当合理地使用call或apply方法,并且仔细设计继承的顺序和参数传递的逻辑,以确保子对象能够准确地继承父对象的所有功能。此外,理解JavaScript原型链对深入理解这些方法也有很大帮助,因为原型...

    Javascript - 全面理解 caller,callee,call,apply (转载)

    这篇文章将深入探讨四个关键概念:caller、callee、call和apply,它们都是JavaScript函数操作的核心部分,对于理解和使用高级JavaScript编程至关重要。 首先,我们来了解`caller`和`callee`。在JavaScript的函数...

Global site tag (gtag.js) - Google Analytics