转:http://www.smallrain.net/study_show.asp?id=710
函数的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`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。
在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...
本文实例分析了JavaScript函数apply()和call()用法与异同。分享给大家供大家参考,具体如下: JavaScript的函数是对象,因此有属性和方法。每个函数都包含两个属性:length和prototype,每个函数都包含两个非继承而...
本文将通过具体的示例来探讨JavaScript中的函数分类以及`this`指向的规则,并介绍如何改变`this`指向的三种方法。 #### 二、函数分类 根据不同的使用场景和定义方式,JavaScript中的函数大致可以分为以下几类: 1....
apply()和call()方法是Function对象的方法,这意味着它们是每个JavaScript函数都具备的。在多数情况下,函数的this指向全局对象(在浏览器中是window),但如果你需要让this指向其他对象,就可以使用apply()或call()...
JavaScript函数是编程语言中的核心概念,它是一种可重复使用的代码块,可以接受输入(参数)并产生输出(返回值)。JavaScript支持两种函数定义方式:函数声明语句和函数定义表达式。 1. **函数声明语句**:在...
此外,`call`和`apply`是函数对象的方法,用于改变函数调用时的上下文(即`this`的值)。 `javadict`这个文件名可能代表手册中的一个部分,可能是关于JavaScript内置对象、方法或特定函数的字典或参考。JavaScript...
JavaScript中的`apply()`方法是函数调用的一种方式,它允许我们改变函数内部`this`的指向,并且可以灵活处理参数传递。在JavaScript中,`this`关键字通常表示函数执行时的上下文,即函数被调用的位置。`apply()`方法...
JavaScript中的柯里化(Currying)是...`bind`方法是JavaScript中用于改变函数上下文和预设参数的关键特性,通过柯里化的思想,我们可以自己实现这个功能,以便在不支持`bind`的环境中使用,或者更好地理解其工作原理。
**关于JavaScript函数的可变参数** JavaScript支持可变参数,即使函数声明中指定了参数,也可以传入任意数量的参数。未声明的参数会自动收集到一个名为`arguments`的对象中,它是一个类数组对象,包含了所有传入...
在JavaScript中,反柯里化通常相对简单,因为我们可以直接使用`Function.prototype.apply`或`Function.prototype.call`方法来传递一组参数: ```javascript function uncurry(curriedFn) { return function() { ...
例如,你可以创建一个基类`Animal`,然后通过`call`或`apply`在子类`Cat`中调用基类的构造函数,这样子类就继承了基类的属性和方法: ```javascript function Animal(name) { this.name = name; this.showName = ...
本文将深入探讨JavaScript函数的两个主要属性——`length`和`prototype`,以及两个重要的方法——`apply()`和`call()`。 首先,让我们来看看`length`属性。它表示函数期望接收的命名参数的数量。例如,在提供的代码...
在函数调用中,`this`的确定较为复杂,需要根据调用方式(常规调用、apply/call方法、箭头函数等)来判断。 6. **函数属性**: - `caller`属性:在非严格模式下,`caller`属性表示调用当前函数的函数,但在ES5中已...
在JavaScript编程中,apply和call是两个非常重要的方法,它们被广泛用于改变函数的上下文环境,也就是改变函数的this指向。这在JavaScript面向对象编程中尤为常见,因为可以利用apply和call来借用其他对象的方法。接...
JavaScript函数大全是对JavaScript编程语言中各种函数的详尽概述,涵盖了从基础到高级的各种功能。JavaScript,作为一种广泛应用于网页和互联网应用的脚本语言,它的函数是实现动态交互和复杂逻辑的核心工具。以下是...
总的来说,`call`和`apply`是JavaScript中实现动态上下文和继承的重要工具,它们提供了灵活的方式来操作函数调用,尤其是在处理对象和类的结构时。尽管JavaScript有多种实现继承的方式,如原型链、类式继承等,但`...
JavaScript为此提供了三个方法:apply、call和bind,它们都能达到改变函数this指向的目的,但在使用方式上有所区别。 首先,我们来了解apply和call方法。两者的作用是完全相同的,都可以立即执行一个函数,并且允许...
- `call()` 和 `apply()`:改变函数的上下文并执行函数,参数可以是单独的值或数组。 - `prototype`:每个函数都有一个`prototype`属性,用于添加实例方法。 6. **其他内置函数** - `typeof`:返回变量的类型。 ...