Javascript中关于call,和apply

概念:

1.call 方法可以用来代替另一个对象调用一个方法,改变函数内部的this指向。

2.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单讲就是借用上下文环境

3.apply()和call()异曲同工,

使用:

1.第一个参数是一个对象,第二个参数是数组里面所有的参数

2.apply()第一个参数也是一个对象,第二个参数是一个数组

实例a:

1 var number = [-15,-1,0,17,59,108];
2     var maxInNumber = Math.max.call(Math,-15,-1,0,17,59,108);
3     var maxInNumber = Math.max.apply(Math,number);
4     var maxNumber = Math.max(-1,12,59);
5     console.log(maxNumber);          //59
6     console.log(maxInNumber);        //108

这个例子的maxInNumber的this指向的方法变成了Math.max()这个方法本身,所以第六行输出了108

实例b:

1 function add(a,b){
2          this(a,b);         
3             console.log(a+b);    //2
4          };
5          function sub(a,b){
6             console.log(a-b);    //4
7          };
8          add.call(sub,3,1);     

这个实例 首先 add.call(sub,3,1)执行的是 add方法, 然后,add执行的时候, this已经变成了 sub这个方法本身,所有this(a,b)这一句输出了2

实例c:

 1 function Movie(){
 2          this.name = "Movie";
 3          this.showName = function(){
 4               console.log(this.name);
 5          }
 6 }
 7 function Book(){
 8          this.name = "Book";
 9 }
10  var movie = new Movie();
11 var book = new Book();
12             
13   /**通过call()或者apply()方法,将原本属于Movie对象的showName()方法交给对象book使用**/
14   movie.showName.call(book,"");          // Book      第二个参数所有的参数
15    movie.showName.apply(book,[]);            // Book      第二个参数是一个数组

这个实例通过call()或者apply()方法,将原本属于Movie对象的showName()方法交给对象book使用

实例d:

 1 function Movie(name){
 2          this.name = name;
 3          this.showName = function(){
 4               console.log(this.name);
 5          }
 6 }
 7 function Book(name){
 8          Movie.apply(this,[name]);   
 9       // Movie.call(this,name);   10 }
11 var book = new Book("Javascript");    //book对象可以调用Movie对象上的方法和属性
12 book.showName();        //Javascript

关于继承:使用Movie对象代替this对象,那么Book对象也就有了Movie的属性和方法