javascript 函数的方法call()和apply()

本文主要参考:xiaofeizm55333童鞋的javaScript 中 call 函数的用法说明

call()和apply()的第一个参数都是要调用的函数的对象,在函数体内这一参数是关键字this的值。

call()的剩余参数是传递给要调用的函数的值。

结构如下:call([thisObj[,arg1[, arg2[, [,.argN]]]]])

 

看完下面原作者列出的代码可以解释如下,call()方法就是要用thisObj里的属性或参数,调用call()方法前面的那个对象(函数)的方法

说的通俗一些就是

call()方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

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

add. call (sub , 3 , 1 ) ;

即add代替sub来接受3和1这两个参数,其等同于add(3,1)

更为复杂些的代码反而更容易理解,让我们看一下这个东西是怎么运行的吧

 

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″);

我倒感觉这句可以这么理解一下,c1执行showName方法,只不过其中的this被对象c2给代替了

call()还可以实现继承,继续看原贴的代码,

function Class1 ( )
{
    this. showTxt = function (txt )
    {
        alert (txt ) ;
    }
}

function Class2 ( )
{
    Class1. call ( this ) ;
}

var c2 = new Class2 ( ) ;

c2. showTxt ( "cc" ) ;

Class2里面调用了Class1的call()方法,这里的this已经是c2了。那么就相当于c1.showText.call(c2,’cc’);和上面解释相同,不重复了。

call()还可以实现多继承,呵。由于原作者这里没有把代码补全,我就给修补一下,也方便自己理解

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 ) ;
}

var c2 = new Class2 ( ) ;

c2. showAdd ( 1 , 2 ) ;

c2. showSub ( 2 , 1 ) ;

两个call()方法就实现了多重继承。呵。

apply()方法与call()方法完全一样,只是apply()方法后面要调用的参数要以数组形式给出即:[0,1]这样。呵。

 

作者:小小子
出处:小小子,simaopig(http://www.xiaoxiaozi.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值