Js中的call方法

废话

道听途说,一直以为Js是很弱智的,于是就没有学,直接进项目,随便看了两天就用起来了,结果还真是的,一个复杂的前台页面写下来,1500多行的Js以为自己差不多了,这几天看了一下2048的源码,看到人家写的漂亮而严谨,用到一些简洁的方法我完全不懂,就了解了下,才知道Js只是入手快而已,其灵活多变,驾驭的好而优雅并不比JAVA和C#简单....所以我决定系统地过一遍Js,本文不过是个开头.


Js里面有一个call的方法很有意思.


定义

文档中是这样写的:

call 方法

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

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

参数

thisObj

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

arg1, arg2,  , argN

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

说明

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

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


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

var Add=function(a,b)
{
console.info(a+b);
}

var Sub=function(a,b)
{
console.info(a-b);
}

Add.call(Sub,3,3);//它输出6:用Add对象替换Sub对象来执行方法.

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


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

function Sister()
{ 
	this.age=18;
	this.sayAge= function() 
	{
		document.write("Age:"+this.age);
	}
	this.yaya=function()
	{
		document.write("yaya.....");
	}
}
function Brother()
{ 
	this.age=25;
	this.sayAge=function(){
		document.write("Age:"+this.age);
	}
	this.hoho=function()
	{
		document.write("hoho.....")
	}
}
var sis=new Sister();
var bro=new Brother();
sis.sayAge.call(bro);

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


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

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


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


ps:要是我设计的js,我就规定这么写:sis.sayAge.in(bro)

 



  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值