javascript中apply/call的理解

读js框架的时候, apply/call出现的频率很高,于是仔细查阅了一下这方面的资料,终于理解了一些。
apply(thisObj,[arg1,arg2....]):调用一个对象的一个方法,以另一个对象替换当前对象。(英文翻译过来的说法)
我是这样理解的:
1、thisObj作为句柄传入给当前对象方法内部的"this",该"this"就有了thisObj的方法和属性。
2、后面的参数arg1,arg2...都是传递给当前对象的参数。
3、thisObj这个对象也获得了当前对象的属性和方法。例子:
<script language="javascript">
var Person=function(name,age){//person类
this.name=name;
this.age=age;
this.personFun=function(){
alert("I am a Person");
}
this.sayMessage=function(){
alert("I am " +name);
if(this.tall){
//方法内部的this, 获得了thisObj即“OneInPerson”的属性tall
alert("I am " +this.tall+" tall");
}
}
};
var OneInPerson={
name:"OneInPerson",
age:"18",
tall:"170cm"
};
Person.apply(OneInPerson,[OneInPerson.name,OneInPerson.age]);
OneInPerson.sayMessage();
//OneInPerson也获得了当前对象的方法"sayMessage()"

/*相当于有两个对象a(OneInPerson)和b(Person),a先通过apply先把自己的属性和方法(tall)给b,然后a也有了b的方法和属性(sayMessage()),这样很有用,稍微改一下就实现了继承:*/

var Student=function(name,age,grade){
this.grade=grade;
this.sayGrade=function(){
alert("I am " +grade);
}//自己的方法

Person.apply(this,[name,age]);
/* 承上启下的作用:把上文的this给父类,而下文的this便有了父类的属性和方法,即而实现了继承,而对继承的东西再操作,即而实现了覆盖。*/

this.sayMessage=function(){
//覆盖父类Person的sayMessage()
alert("I am a student, " +"my name is "+this.name);
}
};

var stu=new Student("oneStudent","20","大一");
stu.personFun()//继承得到的
stu.sayMessage();//覆盖了
stu.sayGrade();//自己的


/*call()只是参数和apply不同, 其余用法一样。*/

</script>

以上是我个人的理解,不对的地方请大家指教、批评!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值