/*
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
*/
function obj1(a, b){
alert(a + b);
alert(this);
}
function obj2(a, b){
alert(a - b);
alert(this);
}
obj1.call(obj2, 3, 1);// output 4, obj1替换obj2
obj2.call(obj1, 3, 1);// output 2, obj2替换obj1
function Class_a(){
this.name = 'class a';
this.showName = function(){
alert(this.name);
}
}
function Class_b(){
this.name = 'class b';
}
//通过call,可以让Class_b拥有Class_a的showName方法
var c_a = new Class_a();
var c_b = new Class_b();
c_a.showName.call(c_b); //通过call,让实例c_b拥有c_a的showName方法
//模拟继承
function Class1(){
this.showSub = function(a, b){
alert(a - b);
}
}
function Class2(){
this.showAdd = function(a, b){
alert(a + b);
}
}
//obj分别继承Class1和Class2的减法、加法
function obj(){
Class1.call(this);
Class2.call(this);
}
var c = new obj();
c.showSub(4, 1);