JavaScript call() 和 apply()
1.ECMAScript 规范给所有函数都定义了apply 和 call 方法
2.apply() 和 call() 作用一样,传参数形式不一样
apply()
apply()方法传入两个参数,一个是函数上下文的对象,一个是该函数传入的数组形式的参数
var Person = { name :'Lucy' } function getName(name1,name2){ console.log(this.name + name1 + name2); //Lucy Tom Tim } getName.apply(Person,['Tom','Tim']); //第一个参数指向person对象 ,this.name 指向 person.name ; 第二个参数是一个数组,数组中的元素分别代表函数的参数一和参数二
call()
call()方法传入两类参数,第一个参数是上下文对象,第二类参数以列表的形式传入
var Person = { name :'Lucy' } function getName(name1,name2){ console.log(this.name + name1 + name2); //Lucy Tom Tim
}
getName.call(Person,'Tom','Tim');
两个方法的作用:
- 改变this指向
- 借用别的对象的方法
- 调用函数
1.如上 call()方法例子,第一个参数传入的person对象,getName函数中的this便指向了 person对象
2.借用别的对象的方法
var Person1 = function(){ this.name = 'LiLi'; } var Person2 = function(){ this.getname = function(){ console.log(this.name); // 'LiLi' 此时Person1中的this 变成 Person2 中的this } Person1.call(this); }
var person = new Person2; person.getname();
3.调用函数
apply 和call 方法都能使函数立即执行,因此可以调用函数
function getName(){ console.log('My name is xxt'); } getName.call();