- 浏览: 230525 次
- 性别:
- 来自: beijing
文章分类
call 的用法
javaScript
中的 call
() 是一个奇妙的方法,但也是一个让人迷惑的方法,先看一下官方的解释:
call
方法
请参阅
应用于:Function 对象
要求
版本 5.5
调用一个对象的一个方法,以另一个对象替换当前对象。
call
([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call
方法可以用来代替另一个对象调用一个方法。call
方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
-------------------------------------------------------------------------------------------
乍一看,很容易把人看迷胡,先做一些简单的说明
obj1.method1.call
(obj2,argument1,argument2)
如上,call
的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入.
举一个具体的例子
f
unction add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call
(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call
(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
看一个稍微复杂一点的例子
function Class1()
{
this.name = "class1";
this.showNam = function()
{
alert(this.name);
}
}
function Class2()
{
this.name = "class2";
}
var c1 = new Class1();
var c2 = new Class2();
c1.showNam.call
(c2);
注意,call
的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2");
怎么样,觉得有意思了吧,可以让a对象来执行b对象的方法,这是java程序员所不敢想的。还有更有趣的,可以用 call
来实现继承
function Class1()
{
this.showTxt = function(txt)
{
alert(txt);
}
}
function Class2()
{
Class1.call
(this);
}
var c2 = new Class2();
c2.showTxt("cc");
这样 Class2 就继承Class1了,Class1.call
(this) 的 意思就是使用 Class1 对象代替this对象,那么 Class2 中不就有Class1 的所有属性和方法了吗,c2 对象就能够直接调用Class1 的方法以及属性了,执行结果就是:alert(“cc”);
对的,就是这样,这就是 javaScript
如何来模拟面向对象中的继承的,还可以实现多重继承。
function Class10()
{
this.showSub = function(a,b)
{
alert(a-b);
}
}
function Class11()
{
this.showAdd = function(a,b)
{
alert(a+b);
}
}
function Class2()
{
Class10.call
(this);
Class11.call
(this);
}
很简单,使用两个 call
就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call
的用法
说了call
,当然还有 apply,这两个方法基本上是一个意思
区别在于 call
的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments
还有 callee,caller,这个和call
的 用法就不同了,放到下次讲吧 ,呵呵。
这样的继承,是有问题的,直接在类函数体里面定义成员方法,将导致每个实例都有副本,重复占用了内存。
apply 的用法
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入
发表评论
-
重写openalyers 的方法,加载天地图瓦片数据
2012-06-20 09:16 6374将TiandituLayer 加载到OpenLayers.js ... -
ArcGIS客户端API中加载大量数据的几种解决办法
2012-06-20 09:18 3079原文地址:http://blog.newnaw.com/?p= ... -
table_border.html
2011-01-21 17:07 932<html> <head> ... -
jquery 菜单效果一个
2010-09-26 16:02 1170<html> <head> ... -
ExtJs layout
2010-07-20 15:20 1342extjs的容器组件都可以设置它的显示风格,它的有效值有 ab ... -
验证验证
2010-05-28 15:40 945匹配中文字符的正则表 ... -
jquery validate.js x学习
2010-04-12 16:05 1260学习了 jquery validate.js ... -
CSS 定义鼠标的样式
2009-12-17 15:33 1698CSS允许你控制网页外观 ... -
学习AJAX框架后的理解
2009-11-25 14:20 1012现在很多的AJAX框架,表现的是很优秀恩 不大可能一下就 ... -
jquey中的$符号与其他框架的$的冲突解决方法
2009-11-25 12:39 1024Jquery 中的$(id)方法来获取一个元素,或者其他的一些 ... -
IE6下div不能将select框遮住
2009-11-24 13:35 1942<Fieldset style="border ... -
DHTMLX框架AJAX
2009-11-20 17:28 1385在项目中用了下Dhtml的Grid,一直都没有仔细的 ... -
关于页面的传值
2009-11-20 10:46 1114有两个页面,父页面与子页面,父页面要传一个参数给子页面, ... -
jQuery 的CSS属性
2009-11-15 16:06 6621CSS属性的设定, 可以用预先定义的 CSS样式,使用$ ... -
jQuery 理解
2009-11-15 14:10 1186jquery this的含义 在触发事件的时候,是指向原生态 ... -
jquery理解
2009-11-11 10:24 1102下载好后引用这个jQuery库就可以了我们的jQuery开发了 ... -
内存泄露与闭包
2009-11-05 17:34 1631JavaScript 编程来说,内存泄露是一个很潜在的危险,主 ... -
JavaScript的跨域问题
2009-11-05 17:03 1614可能是经过的项目少,还没有经历过跨域问题,于是收集点跨 ... -
使用dtmlxGrid 未知运行的错误。与显示不出来的情况
2009-09-22 16:05 959ie4,ie6,ie7 环境下会出现这个错误, 原因 gri ... -
javascript 中this 的用法
2009-09-09 14:14 996在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如 ...
相关推荐
`apply`方法与`call`类似,主要区别在于传递参数的方式。`apply`接受两个参数:第一个参数同样是`this`值,第二个参数是一个数组或类数组对象,其中的元素作为函数的参数: ```javascript func.apply(thisArg, ...
JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...
JavaScript 中的 call、apply、bind 方法是 Function 对象自带的三个方法,这三个方法的主要作用是转变函数中的 this 指向,从而可以达到“接花移木”的效果。下面将对这三个方法进行具体的讲解,并列出几个经典应用...
在JavaScript中,`apply`和`call`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向以及动态传递参数。这两者的主要区别在于参数的传递方式。 首先,`this`在JavaScript中是一个关键字,它在不同...
在JavaScript中,`call` 和 `apply` 是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即`this`的指向。本文将深入探讨这两种方法的用法及其在实际编程中的应用。 ### 1. `call` 的基本用法 `...
### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。
JavaScript 函数用法大全 JavaScript 作为一个功能强大且...JavaScript 函数用法大全提供了多种方法来操作数组、数字、字符串、表单验证、HashMap、堆栈、日期函数、call 函数等,使得开发者可以更加方便地编写代码。
本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...
JQuery源码分析与JavaScript中的apply与call方法是JavaScript编程中非常重要的概念,这两者都是函数对象的方法,用于在特定的作用域中执行函数,并可以指定函数体内this的指向。从JQuery源码中分析apply和call方法,...
在JavaScript中,`call`和`apply`是两个非常重要的函数,它们都允许开发者改变函数执行时的上下文,即`this`的指向。这两个方法主要用于实现函数的绑定和继承,以及处理数组或类数组对象。 首先,我们来看`call`的...
在JavaScript编程中,`apply`、`call`和`bind`这三个方法被广泛用于改变函数内部`this`的指向,这对于理解和编写复杂的JavaScript代码至关重要。虽然它们的功能相似,但在具体用法上存在一定的差异。 #### 相同之处...
在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数内部`this`的指向,实现函数的动态绑定。这两个方法都是Function对象的原型方法,可以应用到任何函数上。 首先,让我们深入理解`...
本文实例讲述了javascript中call,apply,bind函数用法。分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 ...
bind()方法与apply和call不同,它不会立即执行函数,而是创建一个新的函数,当这个新函数被调用时,它的this被绑定到bind()方法的第一个参数,即传入的上下文对象。bind()可以传递部分参数给原函数。 ```javascript...
总的来说,`call`和`apply`是JavaScript中实现动态上下文绑定和灵活参数传递的重要工具,对于理解和使用JavaScript的高级特性,如原型继承、函数封装和异步处理等,具有至关重要的地位。掌握它们的用法能够极大地...
### JavaScript中的apply与call用法详解 #### 一、引言 在JavaScript中,`apply`与`call`是两个非常重要的函数,它们都属于`Function.prototype`的一部分,因此每一个函数对象都拥有这两个方法。这两个方法的主要...
这篇文章主要介绍了JavaScript函数Call、Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、方法重用 使用 call() 方法,您可以编写能够在...
Function.prototype.apply()方法与call方法类似,同样可以指定函数内部this的指向并执行函数,但是apply方法仅接受两个参数,第一个参数同样是函数内部this的指向,第二个参数必须是一个数组,数组中的元素依次对应...
在JavaScript中,`call()` 和 `apply()` 是两种非常重要的函数调用方式,它们都用于改变函数内部 `this` 的指向。尽管它们的作用相似,但使用方式略有不同。 `call()` 方法允许你调用一个函数,并指定这个函数的 `...