apply 与 call 详细

栏目: JavaScript · 发布时间: 6年前

内容简介:只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用

apply 与 call 介绍

function f1(x, y) {
    console.log("结果是:" + (x + y) + this);
}
f1(10, 20); //函数的调用
// 结果是:30[object Window]

// 此时的 f1 实际上是当作对象来使用的,对象可以调用方法
f1.apply();  // 结果是:NaN[object Window]
f1.call();   // 结果是:NaN[object Window]

f1.apply(null);  // 结果是:NaN[object Window]
f1.call(null);  // 结果是:NaN[object Window]
  • applycall 方法中如果没有传入参数,或者传入的是 null ,那么调用该方法的函数对象中的 this 就是默认的 window
  • applycall 都可以让函数或者方法来调用,传入参数和函数自己调用的写法不一样,但是效果是一样的。
f1.call(null,10,20);  // 结果是:30[object Window]
f1.apply(null,[10,20]);  // 结果是:30[object Window]
  • 基本使用
function f2(x, y ){
    console.log("结果:"+(x+y)+"  "+ this.age );
}
window.f2(10, 20);  //结果:30  undefined
// obj是一个对象
var obj = {
    age: 10,
    sex: "男"
};
window.f2.apply(obj,[10, 20]);  //结果:30  10
window.f2.call(obj,10,20);  //结果:30  10
console.dir(obj);  // age: 10 sex: "男"

applycall 的作用:改变 this 的指向

applycall 可以改变 this 的指向

例子1:用于方法

function Person(age, sex){
    this.age = age;
    this.sex = sex;
}
//通过原型添加方法
Person.prototype.sayHi=function(){
    console.log("您好呀:"+this.sex);
}
var per = new Person(10,"男");
per.sayHi(); // 您好呀:男

function Student(name, sex){
    this.name = name;
    this.sex = sex;
}
var stu=new Student("小明", "女");
per.sayHi.apply(stu); // 您好呀:女
per.sayHi.call(stu);  // 您好呀:女
// stu 没有 sayHi(),但是通过apply或call可以让它调用per的sayHi().

例子2:用于函数

function f(x, y){
    console.log("结果是:"+(x+y)+"  "+this);
    return "此时的this是"+this;
}
// apply和call调用
var r1=f.apply(null,[1,2]); // 此时f中的this是window
console.log(r1);
//结果是:3  [object Window]
// 此时的this是[object Window]
var r2=f.call(null,1,2); // 此时f中的this是window
console.log(r2);
 //结果是:3  [object Window]
// 此时的this是[object Window]

// 改变this的指向
var obj={
    sex: "男"
}
// 本来f函数是window对象的,但是传入obj之后,f函数就是obj对象的
var r3=f.apply(obj,[1,2]); // 此时f中的this是obj
console.log(r3);
// 结果是:3  [object Object]
// 此时的this是[object Object]
var r4=f.call(obj,1,2); // 此时f中的this是obj
console.log(r4);
// 结果是:3  [object Object]
// 此时的this是[object Object]

applycall 的使用方法总结

apply 的使用方法:

函数名字.apply(对象,[参数1,参数2,...]);
方法名字.apply(对象,[参数1,参数2,...]);

call 的使用方法:

函数名字.call(对象,参数1,参数2,...);
方法名字.call(对象,参数1,参数2,...);

applycall 的不同:

  • 参数传递的方式是不一样的

使用场景

只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用 apply 或者是 call 的方法改变 this 的指向。

  • applycall 方法实际上并不在函数这个实例对象中,而是在 Functionprototye 中。

以上所述就是小编给大家介绍的《apply 与 call 详细》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Computation and Programming Using Python

Introduction to Computation and Programming Using Python

John V. Guttag / The MIT Press / 2013-7 / USD 25.00

This book introduces students with little or no prior programming experience to the art of computational problem solving using Python and various Python libraries, including PyLab. It provides student......一起来看看 《Introduction to Computation and Programming Using Python》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试