call,apply学习小结

之前一直不太清楚js的call,apply的作用是什么,直到看到了这篇博文

http://blog.csdn.net/myhahaxiao/article/details/6952321

 1   function Person(name,age)
 2       {
 3         this.name=name;
 4         this.age=age;
 5       }
 6 
 7     function Student(name,age,grade)
 8       {
 9         Person(name,age);
10         Person.call(this,name,age);
11         alert(window.name);
12         this.grade=grade;
13       }
14     var student=new Student("zhangsan",21,"一年级");
15     alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);

 

为什么用Person.call,而不是直接调用Person函数呢?直接用Person(name,age);这里给this赋值,this是window,最后window拥有了name跟age值;

原因是this的指向,函数作用域取决于定义它时所在的地方,而不是执行它时所在的地方。这里Person函数是在全局环境下定义的,所以this变成了window;

而Person.call(this,name,age);的作用是将Person函数的作用域变成了当前函数,所以最终生成的实例student拥有了name跟age值,所以call的作用是可以改变函数的作用域,下面这个例子也说明了这一点:

 1       var name="CC";
 2       function Person(name)
 3         {
 4           alert(name);
 5         }
 6 
 7       function Student()
 8         {
 9           var name="AA";
10           Person.call(this,name);
11         }
12       var student=new Student();    

最终弹出的是AA!

至于apply的妙用可以参考链接。

 

posted @ 2016-07-26 18:02  四月既望  阅读(123)  评论(0编辑  收藏  举报