javascript call的解释

对于javascript 中的call函数的理解问题

2008-08-09 15:29 livbirds  |  分类:JavaScript  |  浏览4120次
call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj

可选项。将被用作当前对象的对象。

arg1, arg2, , argN

可选项。将被传递方法参数序列。

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

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

完全搞不懂 这个函数的意思 和使用方法

举个例子 

我使用这个运算

<script language="javascript" type="text/javascript">
function myFun()
{

      document.write(arguments + " ");
}

   var myObject = new Object();
    myFun.call(myObject,13,3,95);
  </script>

答案结果是
[object Object] 

我想问的是 myFun.call(myObject,13,3,95 )这几个参数 13,3,95是什么关系 它们之间 这个函数到底是怎么运行的
看那些书上的解释 看不懂
希望有高手 来帮忙解答
检举| 2008-08-21 23:56 提问者采纳
标准解释:call方法是将一个对象的方法在另一个对象的上下文环境中执行。

详细解释:你的例子中,myFun.call(myObject, 13, 3, 95)执行时是这样的:
1. 调用myFun函数
2. 将13,3,95三个参数传递给它(你的myFun方法中没有处理这些参数的代码,所以传了也没有用)
3. 将myFun函数中的所有this用myObject代替(同样,你的myFun函数中没有使用this,所以执行结果和直接调用myFun()是一样的)

修改一下你的例子,帮助你理解:
function myFun(p1, p2, p3) 
{
this.para1 = p1;
this.para2 = p2;
this.para3 = p3;
}

var myObject = new Object(); 

alert(myObject.para1) //显示undefined

myFun.call(myObject,13,3,95); /*执行的时候,myFun方法中的this全部用myObject对象代替,所以在这个例子中,执行myFun方法和直接写下面的语句效果是一样的:
myObject.para1 = 13;
myObject.para2 = 3;
myObject.para3 = 95;
*/

alert(myObject.para1) //显示13
/*
比较合理的解释:结合javascript里面到底this,是什么来解释:
myFun(13,3,95)的时候,是谁在调用在方法呢,是window对象,所以呢?那个this指的是window
myFun.call(myObject,13,3,95);
call方法是每一个函数对象里面prototype里面的方法,这里我们不认为他是个方法了,就是认为这个的意思就是设置myFun的调用者是myObject(或说设置myFun的作用域是myObject函数一样),这个时候myFun里面的this就是myObject
 
最后解释:myObect,利用后面的参数调用myFun方法
 
2012-04-08 17:25

javascript的call方法实现继承

上一篇文章中我们讲到了使用call可以传递this参数!

那么本篇文章将使用call方法实现继承!

代码如下:

//使用call方式实现继承!

//父函数Paren

function Paren(username){

this.username = username;

this.getUsername = function(){ alert(this.username);}

}

//子函数Child,里面调用父函数,传入this,这样在创建Child对象时,this就代表创建的对象。

function Child(username, password){

        Paren.call(this, username);

this.password = password;

this.getPassword = function(){ alert(this.password);}

}

var p = new Paren("zhangsan");

var c = new Child("lisi", "123");

//定义父对象,输出username=“zhangsan”

p.getUsername();

//定义子对象,由于子函数里面使用了Paren.call(this, username);  所以实现了方法的继承!可以调用到getUsername()方法

c.getUsername();

c.getPassword();

下面的红色解释不正确(我以为是window直接调用的,但是思路是对的)

 解释:这个里面new Child()=Window.Child(),方法,然后在在Child方法里面要调用Paren方法,根据谁调用的方法this,就是谁,那这个时候,this就是child(注意:this.password=possword里面的this和那个this是不一样的,因为那个this是说谁调用了他,很显然这个child方法是window调用的)
 
 
 
 
 
 
 
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值