js--call();
转载自梁龙飞的CSDN的博客
定义
文档中是这样写的:
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对象中来执行.

浙公网安备 33010602011771号