Javascript中关于call()和apply()方法的this指向问题

it2023-04-06  72

转载自https://www.cnblogs.com/zpzl/p/6690451.html 概念:

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:

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

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

实例c:

function Movie(){ this.name = "Movie"; this.showName = function(){ console.log(this.name); } } function Book(){ this.name = "Book"; } var movie = new Movie(); var book = new Book(); /**通过call()或者apply()方法,将原本属于Movie对象的showName()方法交给对象book使用**/ movie.showName.call(book,""); // Book 第二个参数所有的参数 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
最新回复(0)