`
leavingme
  • 浏览: 25759 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

函数的apply、call方法和length属性

阅读更多
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函数参数形式的区别。
与 arguments 的 length属性不同,函数对象的还有一个参数相关的属性 length,它表示函数定义时所指定参数的个数,而非调用时实际传递的参数个数。 例如下面的代码将显示2: 
function sum(a,b){ 
  
return a+b; 

alert(sum.length); 
分享到:
评论

相关推荐

    理解JavaScript的caller callee call apply

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

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

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

    JavaScript函数apply()和call()用法与异同分析

    每个函数都包含两个属性:length和prototype,每个函数都包含两个非继承而来的方法:apply()和call()。 今天先来介绍一下前端面试中经常问到的apply()和call()的区别吧! 这两个方法的作用是在函数调用时改变函数的...

    JavaScript中的apply和call函数详解

    首先,我们需要明白在JavaScript中,函数也是对象,所以它们可以拥有自己的方法,比如toString()、call()和apply()。 在JavaScript中,函数和方法的区别通常取决于函数是如何被调用的。如果函数是作为一个独立的...

    JS中用法apply方法通过不同数量的参数调用函数的方法_.docx

    JavaScript中的`apply()`方法是函数调用的一种方式,它允许我们改变函数内部`this`的指向,并且可以灵活处理参数传递。在JavaScript中,`this`关键字通常表示函数执行时的上下文,即函数被调用的位置。`apply()`方法...

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

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

    JsCall方法详解(js的继承).pdf

    在这里,`Class1.call(this)`将`Class1`的构造函数调用放在`Class2`的上下文中,从而`Class2`实例拥有了`Class1`的`name`属性和`showName`方法。 `call`方法还可以用于实现多重继承,就像下面这个例子: ```...

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

    在JavaScript编程中,apply和call是两个非常重要的方法,它们被广泛用于改变函数的上下文环境,也就是改变函数的this指向。这在JavaScript面向对象编程中尤为常见,因为可以利用apply和call来借用其他对象的方法。接...

    浅谈javascript 函数属性和方法

    本文将深入探讨JavaScript函数的两个主要属性——`length`和`prototype`,以及两个重要的方法——`apply()`和`call()`。 首先,让我们来看看`length`属性。它表示函数期望接收的命名参数的数量。例如,在提供的代码...

    javascript中利用柯里化函数实现bind方法_.docx

    返回的匿名函数在被调用时,它会收集自己的`arguments`对象(即`innerArgs`),然后将`outerArgs`和`innerArgs`合并,通过`apply`方法调用原始的`callback`,确保`this`指向`context`。 在不支持`bind`方法的环境中...

    Javascript函数

    3. **函数调用**:函数可以通过多种方式执行,包括直接调用、作为对象的方法调用、作为构造函数使用`new`关键字调用,或者通过`call`、`apply`和`bind`等方法间接调用。 4. **return语句**:如果没有`return`语句,...

    Javascript函数手册.rar

    此外,`call`和`apply`是函数对象的方法,用于改变函数调用时的上下文(即`this`的值)。 `javadict`这个文件名可能代表手册中的一个部分,可能是关于JavaScript内置对象、方法或特定函数的字典或参考。JavaScript...

    js面向对象简单编程.pdf

    在JavaScript中,数组也是对象的一种,可以使用各种方法和属性来操作数组。 文档进一步讲解了如何定义对象字面量以及如何定义包含函数的对象,这体现了对象在JavaScript中的灵活用法。例如,可以定义一个名为`user`...

    JS中call/apply、arguments、undefined/null方法详解

    在继承场景下,通过`call`或`apply`,子类可以在构造函数中调用父类的构造函数,从而继承父类的属性和方法。例如,上面的`Animal`和`Cat`的例子就展示了如何通过`call`实现简单的继承。 至于多重继承,JavaScript中...

    js中函数调用的两种常用方法使用介绍.docx

    2. **方法调用**:将函数作为对象的一个属性调用,`this`指向调用该函数的对象。 3. **call/apply调用**:这两个方法允许你改变`this`的指向,并且可以传入参数数组。`call`直接传入参数列表,`apply`传入一个包含...

    JS call()及apply()方法使用实例汇总

    JavaScript中的call()和apply()方法是函数对象的两个非常关键的方法,它们的主要作用在于改变函数执行时的上下文,即this的指向,并允许我们在不同环境中调用同一个函数。这两个方法在实际开发中有着广泛的应用,...

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

    bind方法与apply和call方法稍有不同,它不会立即执行函数,而是返回一个新的函数,这个新函数的this被永久地绑定到了bind第一个参数的值。这个特性使得bind方法非常适合在需要记忆函数的this上下文时使用。 ```...

    javascript下arguments,caller,callee,call,apply示例及理解

    至于call和apply方法,它们是Function对象的方法,允许你将函数绑定到另一个对象上,并在该对象的作用域内执行函数。不同的是,call方法接受参数列表,而apply方法接受一个参数数组。call和apply的主要用途是借用...

    javascript语言参考+教程 CHM

    apply 方法; asin 方法; atan 方法; atan2 方法; atEnd 方法; big 方法; blink 方法; bold 方法; call 方法; ceil 方法; charAt 方法; charCodeAt 方法; compile 方法; concat 方法 (Array); concat ...

Global site tag (gtag.js) - Google Analytics