call方法:
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入
举例说明1:
<script type="text/javascript"> function add(a,b){ alert(a+b); } function sub(a,b){ alert(a-b); } add.call(sub,4,5); </script>
输出结果为:9,表示把add方法放到sub上使用,然后传入后面相应的参数
举例说明2:
<script type="text/javascript"> function test1(){ this.name="test1"; this.method1=function(){ alert(this.name); } } function test2(){ this.name="test2"; } var t1=new test1(); var t2=new test2(); t1.method1.call(t2); </script>
输出结果为:test2,表示把t1的method1方法放到t2中去执行
举例说明3:单重继承
<script type="text/javascript">
function animal(){
this.eat=function(){
alert("动物在吃饭");
}
}
function dog(){
animal.call(this);
}
var d=new dog();
d.eat();
</script>
输出:动物在吃饭,animal.call(this);表示把animal对象代替了this对象,那么this对象就有了animal中的属性和方法
举例说明4:多重继承
<script type="text/javascript">
function animal(){
this.eat=function(){
alert("动物在吃饭");
}
}
function dogClass(){
this.type="狗类";
}
function dog(){
animal.call(this);
dogClass.call(this);
}
var d=new dog();
d.eat();
alert(d.type);
</script>
输出:动物在吃饭,狗类,同上,同时dogClass对象也代替了this对象,那么dog中也会有dogClass类中的属性和方法,实现了多重继承