this的原理以及几种不同使用场景的取值

本文详细介绍了JavaScript中的this关键字,包括其在不同场景下的指向规则,如普通函数、对象方法、构造函数、匿名函数、定时器以及箭头函数中的行为。此外,还提到了改变this指向的方法,如call、apply和bind,以及它们的区别和使用场景。

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

1.this原理
this是JavaScript的一个关键字,函数调用时才会出现;
因为函数是在一定的环境中运行的,调用函数时肯定需要知道是[谁调用的]?就用到了this进行指向;
那么this到底指向的是什么?
this 既不指向函数自身,也不指函数的词法作用域,而是调用函数时的对象

2.使用场景
1.普通函数的调用,this指向的是Window

2.对象的方法,this指的是该对象

3.多层作用域链时,this指的是距离方法最近的一层对象

4.构造函数的调用,this指的是实例化的新对象

5.apply和call调用时,this指向参数中的对象

6.匿名函数调用,指向的是全局对象

匿名函数的三种方法

//①先用()包起来,然后再后面跟 (参数)
(function(data){
console.log(data);
})("222");

//②先后面跟(参数),然后再()包起来
(function(data){
console.log(data);
}("333"));

//③正常函数格式,前面加 !
!function(data){
console.log(data);
7.定时器中调用,指向的是全局变量

其实定时器的本质,也是一种匿名函数的形式。

8.箭头函数的this

箭头函数作为匿名函数,式不能作为构造函数的,不能使用new

箭头函数不绑定arguments,取而代之用rest参数…解决

function A(a){
console.log(arguments); //[object Arguments] {0: 1}
}
var B = (b)=>{
console.log(arguments); //ReferenceError: arguments is not defined
}
var C = (...c)=>{ //...c即为rest参数
console.log(c); //[3]
}
A(1);
B(2);
C(3);
箭头函数会捕获其所在上下文的this值,作为自己的this值

var obj = {
a: 10,
b: function(){
console.log(this.a); //10
},
c: function() {
return ()=>{
console.log(this.a); //10
}
}
}
obj.b();
obj.c()();
箭头函数没有原型属性

3.this指向的优先级 ?
new>显式绑定>隐式绑定>默认绑定

默认绑定:默认函数指向wiindow

隐式绑定:object 箭头函数

显式绑定:apply call bind

new:构造函数

4.如何改变this指向?
三种方法:

call() 它可以调用函数也可以改变函数this的指向,一般用于继承

apply() 它也可以调用函数,也可以修改this指向,但他传递的参数必须在数组中呈现

bind()它不会主动调用函数,但是可以修改this指向,它返还的是原函数this指向改变之后的新函数

function fun() {
console.log(this); // 原来的函数this指向的是 Window
}
fun();
function fun(a, b) {
console.log(this); // this指向了输入的 字符串apply
console.log(a + b);
}
//使用apply() 方法改变this指向,
//此时第一个参数是 字符串apply,那么就会指向字符串apply
fun.apply('apply', [2, 3]) // 原函数的参数要以数组的形式呈现
bind() 方法的用法和call()一样,直接运行方法,需要注意的是:bind返回新的方法,

需要重新调用,是需要自己手动调用的

function fun() {
console.log(this); // 原来的函数this指向的是 Window
}

fun();
function fun(a, b) {
console.log(this); // this指向了输入的 字符串bind
console.log(a + b);
}

//使用bind() 方法改变this指向,此时第一个参数是 字符串bind,那么就会指向字符串bind
let c = fun.bind('bind', 2, 3);

c(); // 返回新的方法,需要重新调用
本文章来源于网络,版权归原作者所有,如果地推平台本站文章侵犯了您的权益,请联系我们删除。

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dituirenwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值