当前位置:网站首页>this的指向问题
this的指向问题
2022-07-30 05:46:00 【樂途途】
函数内this的指向问题
函数内的this指向:this的指向是当前我们调用函数的时候确定的,调用的方式不同决定了this的指向不同,一般指向我们的调用者
不同调用方式下的this指向
- 普通函数调用
// 1. 普通函数 this 指向window
function fn() {
console.log('普通函数的this' + this);
}
window.fn(); //window可省略
- 对象方法调用
// 2. 对象的方法 this指向的是对象fn
var fn = {
sayHi: function() {
console.log('对象方法的this:' + this);
}
}
fn.sayHi();
- 构造函数调用
// 3. 构造函数 this 指向 ldh 这个实例对象 原型对象里面的this 指向的也是 ldh这个实例对象
function Star() {
};
Star.prototype.sing = function() {
}
var ldh = new Star();
- 事件绑定方法
// 4. 绑定事件函数 this 指向的是函数的调用者 btn这个按钮对象
var btn = document.querySelector('button');
btn.onclick = function () {
console.log('绑定时间函数的this:' + this);
};
// 5. 定时器函数 this 指向的也是window
window.setTimeout(function () {
console.log('定时器的this:' + this);
}, 1000);
- 定时器函数
// 5. 定时器函数 this 指向的也是window
window.setTimeout(function () {
console.log('定时器的this:' + this);
}, 1000);
- 立即指向函数
// 6. 立即执行函数 this还是指向window
(function () {
console.log('立即执行函数的this' + this);
})();
具体的打印结果:
改变函数内部的this指向
JavaScript常用的三种处理函数内部this的指向问题的方法:call( ) 、apply( ) 、bind( )
三者的区别:
共同点:都可以改变this指向
不同点:
- call( )方法和apply( )方法会调用函数,并且改变函数内部的this指向
- call( )方法和apply( )方法传递的参数不一样,call( )方法传递的参数使用逗号隔开,apply( )方法使用数组的形式传递
- bind( )方法不会调用函数,可以改变函数内部this的指向
主要的应用场景:
- call( )方法经常做继承
- apply( )方法经常跟数组有关系,比如借助数学对象实现数组最大最小值问题
- bind( )方法不会调用函数,但还想改变函数内部this的指向,比如改变定时器内部的this指向
~~
上述有些地方表述可能不够严谨,欢迎交流
~~
边栏推荐
猜你喜欢

三种内核结构---宏内核、微内核、混合内核

华秋电子成为开放原子开源基金会openDACS捐赠人,共建 openDACS开源生态

jvm之方法区

无人机生态环境监测、图像处理与GIS数据分析

Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health

QT串口动态实时显示大量数据波形曲线(五)========“最终完美解决版”

Configure MMdetection environment and train
![[Jiangsu University Self-Chemistry Association stm32F103c8t6] Notes [Entry 32 MCU and GPIO initialization parameter configuration]](/img/96/a98e8b813a2fd9d0a44d3121aaee6a.png)
[Jiangsu University Self-Chemistry Association stm32F103c8t6] Notes [Entry 32 MCU and GPIO initialization parameter configuration]

OpenLayers 初学者指南,源码测试可用

边境的悍匪—机器学习实战:第六章 决策树
随机推荐
【Qingdao Station】High-level application of SWAT model and modeling of areas without data, uncertainty analysis and climate change, improvement of land use surface pollution impact model and case analy
PCB 一分钟科普之你真的懂多层板吗?
边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
JS的值和引用,复制和传递
【青岛站】SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进及案例分析研讨
OpenCV中(rows,cols)与图像(x,y)
遥感、GIS和GPS技术在水文、气象、灾害、生态、环境及卫生等应用
边境的悍匪—机器学习实战:第九章 无监督学习任务
QT每周技巧(1)~~~~~~~~~运行图标
jvm之逃逸分析
基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割
边境的悍匪—机器学习实战:第四章 训练模型
CPU的三种工作模式:实模式、保护模式、长模式
User password encryption using Bcrypt instead of MD5, SHA1 and SHA256
原创 Acegi 1.03 安全机制
QT串口动态实时显示大量数据波形曲线(四)========“界面的美化与处理”
边境的悍匪—机器学习实战:第十六章使用RNN和注意力机制进行自然语言处理
FPGA解析B码----连载1
闭包和作用域(你不知道的JS自用笔记)
海量遥感数据处理与GEE云计算技术应用【基础、进阶】