首页 > 移动平台 > 详细

关于call与apply函数的理解

时间:2015-10-27 16:47:39      阅读:175      评论:0      收藏:0      [点我收藏+]
 1         <script type="text/javascript">
 2             var f={
 3                 foo:function (argument) {
 4                     // body...
 5                     return this.x;
 6                 },
 7                 x:"foo111"
 8             };
 9             var f2={
10                 x:"foo222"
11 
12             }
13             console.log(f.foo());  //输出foo111
14             console.log(f.foo.call(f2));  //输出foo222
15             //f2.foo();
16 
17 
18         </script>

产生这样的输出结果,就是因为call函数改变了对象方法的运行环境

语句1:f.foo();  此时foo内部的this指向的就是f

语句2:f.foo.call(f2) 将foo的执行环境由f换成f2,此时,foo内部的this指向就变成了f2

 

 1 var x="window";
 2 var foo=function (argument) {
 3         // body...
 4         return this.x;
 5     
 6 }
 7 var f1={
 8     x:"f1"
 9 
10 }
11 
12 var f2={
13     x:"f2"
14 
15 }
16 console.log(foo());
17 console.log(foo.call(f1));
18 console.log(foo.call(f2));

体现在应用中,有函数foo(),函数内部语句  return this.x

利用call/apply就可以更改foo函数的运行环境

foo()在全局环境,this指向window
foo.call(f1)在f1对象下,this指向f1
foo.call(f2)在f2对象下,this指向f2

这样foo在执行时就会返回不同的值

接下来再来看看在js继承中的call函数运用

 1             function Father(name,age) {
 2                 // body...
 3                 this.name=name;
 4                 this.age=age;
 5 
 6             }
 7 
 8             Father.prototype={
 9                 getName:function (argument) {
10                     // body...
11                     return this.name;
12                 },
13 
14             }
15 
16             function Son(name,age,job) {
17                 // body...
18                 // this.name=name;
19                 // this.age=age;
20                 // this.job=job;
21                 Father.call(Son,name,age);
22                 this.job=job;
23             }
24             Son.prototype=new Father();
25             Son.getJob=function (argument) {
26                 // body...
27             }
28             

第21行,利用对象冒充在Son的环境下执行Father(name,age)

 

下篇文章再讨论继承

关于call与apply函数的理解

原文:http://www.cnblogs.com/windSamW/p/4914347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!