`
q272156430
  • 浏览: 269929 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

javaScript 中函数对象 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..这些做为参数传入.

  举一个具体的例子

function 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的 用法就不同了

分享到:
评论

相关推荐

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

    JavaScript函数之call、apply以及bind方法案例详解  总结 1、相同点 2、区别 call() 方法 /* 正常模式 */ let obj = { sum(a, b) { console.log(this) return a + b } } // 执行 sum 函数的 apply、bind...

    JavaScript函数Call、Apply原理实例解析

    这篇文章主要介绍了JavaScript函数Call、Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、方法重用 使用 call() 方法,您可以编写能够在...

    【JavaScript源代码】JavaScript函数this指向问题详解.docx

     目录 一、 函数内 this 的指向1、普通函数2、构造函数3、对象方法4、事件绑定方法5、定时器函数6、立即执行函数二、改变函数内部 this 指向1、call 方法2、apply 方法3、bind 方法三、call apply bind 总结1、...

    javascript调用delphi中的函数

    用javascript代码调用delphi写的函数

    javascript 各种函数用法

    js数组,数字函数,字符串函数,表单验证,hashMap,堆栈,日期函数,call函数

    javaScript函数式编程

    本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的...

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

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

    JavaScript程序设计课件:函数的调用方式.pptx

    JavaScript程序设计 函数的调用方式 5.2.2 函数的调用方式 概念 当函数定义完成后,要想在程序中发挥函数的作用,必须...call 和 apply 是 Function 的原型方法,它们能够将特定函数当做一个方法绑定到指定对象上,并进

    Javascript中call和apply函数的比较和使用实例

    一些简单的Javascript操作中较少会用到call和apply函数,在另外一些较大型的操作中,如web应用开发,js框架开发中可能会经常遇到这两个函数。关于这两个函数的解释,网上的资料也很多,但是本人认为很多资料要么...

    javaScript call 函数的用法说明

    call 方法 请参阅 应用于:Function ...call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 ————————————

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

    主要介绍了从JQuery源码分析JavaScript函数的apply方法与call方法,本文结合JQuery源码和js高级程序设计再次探究apply方法与call方法,需要的朋友可以参考下

    JavaScript中的apply和call函数详解

    每个JavaScript函数都会有很多附属的(attached)方法,包括toString()、call()以及apply()。听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,JavaScript中的每个函数都是一个对象。看一下 ...

    javascript call方法使用说明

    先看一下官方的解释: call 方法 请参阅 应用于:Function 对象...call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 乍

    JavaScript中函数(Function)的apply与call理解

    主要介绍了JavaScript中函数(Function)的apply与call理解,本文讲解了JavaScript函数调用分为4中模式以及通过apply和call实现扩展和继承两方面,需要的朋友可以参考下

    javascript中call apply 与 bind方法详解

    在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 ...

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

    call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某...

    JavaScript直接调用函数与call调用的区别实例分析

    本文实例讲述了JavaScript直接调用函数与call调用的区别。分享给大家供大家参考,具体如下: 直接调用 直接调用函数是最常见 最普通的方式,直接以函数附加的对象作为调用者, 在函数后括号内传入参数来调用函数 例如:...

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

    以下内容会分为如下小节: 1.call/apply/bind方法的来源 2.Function.prototype.call() ...首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法?

    JavaScript中的this关键字使用方法总结

    JavaScript 中函数的调用有以下几种方式:作为对象方法调用,作为函数调用,作为构造函数调用,和使用 apply 或 call 调用。 1.作为对象方法调用 在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,...

Global site tag (gtag.js) - Google Analytics