`
mrzhanghuzi
  • 浏览: 26165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apply和call的用法

阅读更多
JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:

Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
  从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数,都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式:

//定义一个函数func1,具有属性p和方法A
function   func1(){
            this.p="func1-";
            this.A=function(arg){
                        alert(this.p+arg);
            }
}
//定义一个函数func2,具有属性p和方法B
function   func2(){
            this.p="func2-";
            this.B=function(arg){
                          alert(this.p+arg);
            }
}
var   obj1=new   func1();
var   obj2=new   func2();
obj1.A("byA");         //显示func1-byA
obj2.B("byB");         //显示func2-byB
obj1.A.apply(obj2,["byA"]);   //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同
obj2.B.apply(obj1,["byB"]);   //显示func1-byB
obj1.A.call(obj2,"byA");     //显示func2-byA
obj2.B.call(obj1,"byB");     //显示func1-byB
  可以看出,obj1的方法A被绑定到obj2运行后,整个函数A的运行环境就转移到了obj2,即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。
分享到:
评论

相关推荐

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

    在JavaScript中,`apply`和`call`方法都是Function对象的内置方法,它们的主要作用是改变函数调用时的上下文(即`this`值),并允许我们在不同对象上执行同一方法,从而实现方法的借用。这两者在功能上相似,但参数...

    js中apply与call简单用法详解.docx

    下面将详细介绍`call`和`apply`的使用方法及其应用场景。 #### 二、call方法详解 `call`方法的第一个参数是用来指定函数执行时的上下文(this指向的对象),剩下的参数则依次为函数调用时需要传递的参数。 **基本...

    bind,apply,call的用法及区别

    bind,apply,call的用法及区别

    javascript技术难点(三)之this、new、apply和call详解

    JavaScript中的this、new、apply和call是理解JavaScript面向对象编程的关键知识点。首先,我们要知道,this关键字在...因此,深入理解this、new、apply和call的原理和使用方法,对于提升JavaScript编程能力至关重要。

    javascript中apply、call和bind的用法区分_.docx

    当`say`方法需要额外参数时,`call`、`apply`和`bind`的使用方式略有不同。 #### 修改后的示例 假设`say`方法需要额外的参数来表示学校和年级。 ```javascript var xw = { name: "小王", gender: "男", age: ...

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

    apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别: Function.prototype.apply(thisArg,argArray);...下面的代码说明了apply和call方法的工作方式: 代码如下: //定义一

    js中继承的几种用法总结(apply,call,prototype)

    `call` 和 `apply` 的主要区别在于第二个参数,`call` 方法接受的是一个个的参数列表,而 `apply` 方法接受的是一个数组。在使用时,选择哪一种取决于你期望的参数传递方式。 call和apply方法除了用于继承,还常...

    详解js中的apply与call的用法.docx

    例如,你可以创建一个基类`Animal`,然后通过`call`或`apply`在子类`Cat`中调用基类的构造函数,这样子类就继承了基类的属性和方法: ```javascript function Animal(name) { this.name = name; this.showName = ...

    js中apply和call的理解与使用方法

    本文将详细介绍apply和call的区别、用法以及如何在实际开发中灵活运用这两个方法。 首先,我们需要理解apply和call方法的基本概念。在JavaScript中,函数作为一等公民,拥有自己的上下文环境,也就是我们常说的this...

    js中call与apply的用法小结

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

    JavaScript中的apply和call函数详解_.docx

    `apply`和`call`在某些场景下可以帮助我们解决因`this`指向不明确而引发的问题,比如在事件处理函数、对象方法、构造函数等场合。同时,它们也是实现函数柯里化(Currying)和模拟类继承等高级功能的基础。 安全...

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

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

    js继承call()和apply()方法总结

    JavaScript 中的 `call()` 和 `apply()` 方法是两种非常重要的函数调用方式,它们在继承和对象间共享行为时发挥着关键作用。本文将详细解析这两种方法的定义、用途以及如何在实际场景中应用。 1. `call()` 方法 `...

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

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

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

    总结来说,apply、call和bind是JavaScript中非常重要的函数方法,它们提供了控制函数上下文的能力,无论是直接调用函数、扩展数组元素,还是改变对象的方法调用,这些方法都是不可或缺的工具。掌握它们的用法,能够...

    从JQuery源码分析JavaScript函数的apply方法与call方法

    通过使用apply和call方法,开发者可以控制函数执行时的上下文,这在很多场景下非常有用,如设置回调函数的作用域,或者在不同的对象之间复用方法。 结合JQuery源码和《JavaScript高级程序设计》,我们可以看到apply...

    理解JavaScript的caller callee call apply

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics