JS高级——call() 和 apply()

一、方法定义:

每个函数都包含两个非继承而来的方法:call()方法和apply()方法。

两个方法的作用是一样的:都可以改变this的指向(在特定的作用域中调用函数)

一般this总是指向调用某个方法的对象,但在使用call()、apply()后会改变this的指向。


  • call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2…); 即A对象调用B对象的方法。
  • apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, [args1,args2…]); 即A对象应用B对象的方法。

call() apply()的参数:

B.call(A, args1,args2…);
B.apply(A, [args1,args2…]);

  • B:父类对象
  • 参数 A:子类对象
  • args1:传给父类对象的参数
// 定义父类构造函数Person
function Person(name) {
    this.name = name;
    console.log(this.name);
}

// 继承构造函数
function Student2(name) {
    // 使用call()方法继承父类构造函数,第二个参数用于传参
    Person.call(this, name);
    // name为实例化student2对象时传入的参数 “王五”,call再将参数传递给父类Person。


    // 使用apply()方法继承父类构造函数,第二个参数以数组的形式表达,结果和call()相同
    // Person.apply(this, [name]);
}

// 实例化子类student2对象s2
var s2 = new Student2("王五");

在这里插入图片描述


2、关于call()、apply()的改变this指向

// 给window添加属性x
window.x = 100;
function fn() {
    console.log(this);
    console.log(this.x);
}
fn();
// 此时this指向window,this.x --> 100
var obj = {
    x: 500
}
fn.call(obj);
// 此时this指向obj,this.x --> 500
fn.apply(obj);
// 此时this指向obj,this.x --> 500

3、call()、apply()常用用法

用于继承
详情见:
https://blog.csdn.net/ZPD_zpd/article/details/113590528

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值