`
liqita
  • 浏览: 291869 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JavaScript Call 方法和 JavaScript Apply方法 总结

阅读更多

 

Javascript的每个Function对象中有一个apply方法:

function.apply([thisObj[,argArray]])

此外,还有另一个很极之相似方法:

function.call([thisObj[,arg1[, arg2[, [,.argN]]]]])

他们的共同之处是,都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。”——摘自JScript5.5 .chm

她们的不同之处是,apply最多只能有两个参数——新this对象和一个数组,如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。而call则是直接的参数列表,对比如下:

function cat(_a, _b, _c, _d){
    alert(_a
+ _b+ _c+ _d);
}
cat.apply(
null,['mao~','hungry','said']);
cat.call(
null,'mao~','full','happy');

主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。 
obj1.method1.call(obj2,argument1,argument2) 
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1…这些做为参数传入。 

举一个具体的例子:

function add(a, b) {
alert(a 
+ b);
}
function sub(a, b) {
alert(a 
- b);
}
add.call(sub, 
31); 

这个例子中的意思就是用 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"); 
另外可以用 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 Class1(){
this.name="class1";
this.showSub = function(a,b){
alert(a - b);
};
}
function Class2(){
this.name="class2";
this.showAdd = function(a,b){
alert(a + b);
}
}

function Class3(){
Class1.call(this);
Class2.call(this);
}
var v3 = new Class3();
v3.showSub(8,6);  // 输出 2 ;调用Class1的 showSub 
v3.showAdd(3,5);  // 输出 8 ;调用Class2的 showAdd  

 

分享到:
评论

相关推荐

    JavaScript中call与apply方法

    JavaScript中call与apply方法

    淡淡简单描述javascript中方法apply和call

    淡淡简单描述javascript中方法apply和call

    javascript callApply代码示例

    javascript callApply代码示例

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

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

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

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

    javascript中call和apply方法浅谈

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

    理解JavaScript的caller callee call apply

    ### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。

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

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

    跟我学习javascript的call(),apply(),bind()与回调

    本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...

    【JavaScript源代码】JavaScript函数之call、apply以及bind方法案例详解.docx

    JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...

    javascript call和apply方法

    总结一下,`call`和`apply`都是JavaScript中改变函数上下文的关键工具。它们的主要区别在于参数传递方式,`call`适用于单个参数,而`apply`适用于参数数组。理解并熟练运用这两个方法对于提升JavaScript编程技巧和...

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

    在JavaScript编程中,`apply`、`call`和`bind`这三个方法被广泛用于改变函数内部`this`的指向,这对于理解和编写复杂的JavaScript代码至关重要。虽然它们的功能相似,但在具体用法上存在一定的差异。 #### 相同之处...

    深化理解关于javascript中apply()和call()方法的区分_.docx

    在JavaScript中,`apply()`和`call()`方法都是用于改变函数调用时的上下文(即`this`关键字指向的对象)以及传递参数。这两个方法都隶属于`Function.prototype`,因此所有函数实例都拥有这两个方法。它们的主要作用...

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

    JavaScript 中的 call、apply、bind 方法详解 JavaScript 中的 call、apply、bind 方法是 Function 对象自带的三个方法,这三个方法的主要作用是转变函数中的 this 指向,从而可以达到“接花移木”的效果。下面将对...

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

    从JQuery源码中分析apply和call方法,有助于我们理解这些方法在实际JavaScript库中的应用,并且加深对其工作原理的理解。 首先,我们需要明确JavaScript中的函数实际上是一个对象,其拥有自己的方法,比如apply和...

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

    总结起来,`apply`和`call`都是JavaScript中非常重要的方法,它们帮助开发者灵活地控制函数调用的上下文和参数传递,是深入理解和熟练运用JavaScript的必备知识。在选择使用哪个方法时,应根据具体的需求和参数类型...

    JavaScript中的call方法和apply方法使用对比

    JavaScript中的call方法和apply方法是Function对象自带的两个内置方法,它们都可以改变函数体内this的指向,让一个拥有私有this的函数能够借用另一个对象的this来执行,并能传递参数。这两个方法在很多情况下可以...

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

    总结来说,`caller`和`callee`提供了对函数调用栈的洞察,而`call`和`apply`则提供了更灵活的函数调用方式,包括改变`this`的指向和动态传递参数。理解和熟练运用这些特性,将使你在JavaScript编程中更加得心应手。

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

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

Global site tag (gtag.js) - Google Analytics