早期的博客4
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
常用示例:
先做说明:obj1.method1.call(obj2,arguments1,arguments2)
加上call的作用就是把obj1的方法放到obj2上使用,后面的arguments作为参数传入;
例1:
function add(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
add.call(sub,3,1);
这个例子的意思就是把add的方法放到sub上执行,即用add替换sub,也就是add.call(sub,3,1) == add(3,1)
,所以运行结果为alert(4);
例2:
function Class1(){
this.name = "class1";
this.showName = function(){
alert(this.name);
}
}
function Class2(){
this.name = "class2";
}
var c1 = new Class1();
var c2 = new Class2();
c1.showName.call(c2); //alert("class2)
注意,call的意思是把c1的方法放到c2上执行,原来c2是没有showName()方法的,现在把c1的showName()方法放到c2上执行,所以this.name应该class2;
实现继承:
例3:
function Class1(){
this.showTxt = function(txt){
alert(txt);
}
}
function Class2(){
class1.call(this);
}
var c2 = new Class2();
c2.showTxt("cc"); //cc
这样Class2就继承Class1,Class1.call(this)
的意思就是使用Class1对象替代this对象,那么在Class2中就是Class1的所有属性和方法了,c2对象能够直接调用Class1的方法以及属性。等于把父类的实例属性复制了一份给子类实例装上了(完全没有用到原型)
例4:(多重继承)
function Class10()
{
this.showSub = function(a,b)
{
alert(a-b);
}
}
function Class11()
{
this.showAdd = function(a,b)
{
alert(a+b);
}
}
function Class2()
{
Class10.call(this);
Class11.call(this);
}
网友评论