javascript中的apply()以及call()方法的使用

本文介绍了JavaScript中this的使用。this是只读变量,在不同上下文引用会改变,最外层代码中指向全局对象,函数内则因调用方式而异。还讲解了Function对象的apply和call方法,它们能让函数的this引用指向特定对象,且传参方式不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于this的使用

this 在javascript中是一个只读的变量。在不同的上下文语境当中,this的引用会有改变。

this 引用的规则:

  1. 在最外层的代码中,this引用的是全局对象。浏览器的环境下,就是Window对象。
  2. 在函数内,this引用根据函数调用的方式的不同而有所不同。

函数内部的this引用规则:

函数的调用方式this引用的引用对象
构造函数调用所生成的对象
方法调用接收方对象
apply或是call调用由apply或call的参数指定的对象
其他方式的调用全局对象
apply 和 call 方法

Function对象的方法。通过他们调用的函数的this引用,可以指向任意特定对象。可以理解为他们能够显示的指定接收方对象。

示例:

var applyDemo = {
    x: "applyDemo",
    printX: function() {console.log("x: " + this.x)}
}
applyDemo.printX();

var newObj = {x: "newObj"};
applyDemo.printX.apply(newObj);
applyDemo.printX.call(newObj);

输出:

x: applyDemo
x: newObj
x: newObj

可以看出使用 apply 和 call 的方法,printX 方法中的 this 引用指向了newObj。

两者的区别在于给 Function 传参时,apply 是通过数组将所有的参数传入,而 call 是将参数分开一个一个传。

示例:

var applyDemo = {
    x: "applyDemo",
    printX: function(a, b) {console.log("x: " + this.x + ", a: " + a  + ", b: " + b )}
}
applyDemo.printX(1, 2);

var newObj = {x: "newObj"};
applyDemo.printX.apply(newObj, [1, 2]);
applyDemo.printX.call(newObj, 1, 2);

输出:

x: applyDemo, a: 1, b: 2
x: newObj, a: 1, b: 2
x: newObj, a: 1, b: 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值