代码改变世界

javascript call 用法

2010-01-15 21:17  fdafda  阅读(536)  评论(0)    收藏  举报

/* 
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);