浏览器不支持

js--call();

转载自梁龙飞的CSDN的博客

定义

文档中是这样写的:

call 方法

调用一个对象的一个方法,以另一个对象替换当前对象。

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

参数

thisObj

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

arg1, arg2,  , argN

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

说明

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

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


如果没有实际的例子,没有办法知道这个奇葩的方法有什么用.我在看了下面这段代码产生了这个想法:

[javascript] view plain copy 在CODE上查看代码片派生到我的代码片
  1. var Add=function(a,b)  
  2. {  
  3. console.info(a+b);  
  4. }  
  5.   
  6. var Sub=function(a,b)  
  7. {  
  8. console.info(a-b);  
  9. }  
  10.   
  11. Add.call(Sub,3,3);//它输出6:用Add对象替换Sub对象来执行方法.  


要是这样直接用Add(3,3);不就OK了吗?


直到我看到下面的例子我才明白:

[javascript] view plain copy 在CODE上查看代码片派生到我的代码片
  1. function Sister()  
  2. {   
  3.     this.age=18;  
  4.     this.sayAge= function()   
  5.     {  
  6.         document.write("Age:"+this.age);  
  7.     }  
  8.     this.yaya=function()  
  9.     {  
  10.         document.write("yaya.....");  
  11.     }  
  12. }  
  13. function Brother()  
  14. {   
  15.     this.age=25;  
  16.     this.sayAge=function(){  
  17.         document.write("Age:"+this.age);  
  18.     }  
  19.     this.hoho=function()  
  20.     {  
  21.         document.write("hoho.....")  
  22.     }  
  23. }  
  24. var sis=new Sister();  
  25. var bro=new Brother();  
  26. sis.sayAge.call(bro);  


它输出的是 Age:25,其实到这里我还很迷糊,下面这一个断点调试才让我明白,


我在第26行打了断点,然后单步了一步.

sis.sayAge.call(bro)调用的方法确实是Sister中的方法,但是其中的this(上下文)却变成了Brother.用文档中的解释就是:只有这个sayAge是sis对象的,其执行环境却是bro的.


简而言之:sis.sayAge.call(bro)意思就是,单单将sis的sayAge移动到bro对象中来执行.

posted @ 2017-05-26 14:22  大晚上不睡觉干什么  阅读(103)  评论(0)    收藏  举报