您的位置:首页 > 移动开发

apply和call的用法

2014-09-23 23:55 253 查看
首先来看API对于apply和call的定义:
apply 方法:
应用某一对象的一个方法,用另一个对象替换当前对象。
apply([thisObj[,argArray]])
参数
thisObj 可选项。将被用作当前对象的对象。
argArray 可选项。将被传递给该函数的参数数组。
说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供
argArray 和 thisObj 任何一个参数,那么Global 对象将被用作
thisObj,并且无法被传递任何参数。


call 方法:

调用一个对象的一个方法,以另一个对象替换当前对象。

call(
[thisObj[,arg1[, arg2[,  [,.argN]]]]])


参数

thisObj 可选项。将被用作当前对象的对象。

arg1, arg2,  , argN 可选项。将被传递方法参数序列。

说明

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由
thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作
thisObj。

可见apply和call方法的意思是一样的,只不过传参的形式不一样;简单说就是对象A可以使用或者继承对象B的方法:
B.apply(A,arguments);相当于B.call(A,param1,param2…paramN);
其中,arguments是由param1,param2…paramN参数组成的数字
如果参数是数组的形式则使用apply,如果参数是一个一个列举的形式则使用call

1.实例:

/*定义人类*/
function Person(name,age,sex)
{
this.name=name;
this.age=age;
this.sex=sex;
this.showPerson=function(){
console.log("姓名:"+this.name+"-"+"年龄:"+this.age+"-"+"性别:"+this.sex);
}
}
/*定义一个学生类*/
function Student()
{
this.name='张三';
this.age='10';
this.sex='男';
}

var person=new Person();
var student=new Student();
person.showPerson.apply(student); //打印结果:姓名:张三-年龄:10-性别:男
person.showPerson.call(student); //打印结果:姓名:张三-年龄:10-性别:男


2.实现继承
function Person(name,age,sex)
{
this.name=name;
this.age=age;
this.sex=sex;
this.showPerson=function(){
console.log("姓名:"+this.name+"-"+"年龄:"+this.age+"-"+"性别:"+this.sex);
}
}
function Student(name,age,sex)
{
Person.apply(this,arguments); //或者 Person.call(this,name,age,sex);
}
var student=new Student('张三',10,'男');
student.showPerson(); //打印结果:姓名:张三-年龄:10-性别:男
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: