详解原生JavaScript的this指向问题和强制改变this指向的三种方法

this关键字概念

面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

this在几种情况下指向谁

1.在方法中,this 表示该方法所属的对象。

var person = {
  firstName: "John",
  lastName : "Doe",
  id     : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

// 显示对象的数据
document.getElementById("demo").innerHTML = person.fullName();
浏览器显示内容为:John Doe  

2.如果单独使用,this 表示全局对象。

"use strict";
var x = this;
在浏览器中,window 就是该全局对象为 [object Window]

3.在函数中,this 表示全局对象。

function myFunction() {
  return this;
}
在浏览器中,window 就是该全局对象为 [object Window]
window.myFunction();

4.在函数中,在严格模式下,this 是未定义的(undefined)。

<button onclick="this.style.display='none'">
	点我后我就消失了
</button>

5.在事件中,this 表示接收事件的元素。

<button onclick="this.style.display='none'">
	点我后我就消失了
</button>

强制改变this指向的三种方法

call()方法

格式 函数名.call();
参数: 
	第一个参数:传入该函数this指向的对象,传入什么强制指向什么
	第二个参数:将原函数的参数往后顺延一位。
	show.call('call',10,20);

apply()方法

格式 函数名.apply();
参数: 
	第一个参数:传入该函数this指向的对象,传入什么强制指向什么
	第二个参数:数组,数组里面放入我们原有的参数
	show.apply('ap',[10,20])

bind() 方法:预设this指向

先通过bind的预设下thie指向,然后返回一个新函数,此时这个新函数this已经指向bb了
var a = show.bind('bb');
a(10,20);
简写:show.bind('bb')(10,20);  
show.bind('指向的名字')('原来的参数')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript中有多种方法可以遍历数组,其中常用的有map、forEach和filter。 1. map方法: map方法会对数组中的每个元素调用一个回调函数,并返回一个新的数组,新数组的元素是原始数组中每个元素经过回调函数处理后的结果。例如,我们有一个数组[1, 2, 3],我们可以使用map方法将每个元素乘以2并返回一个新的数组[2, 4, 6]。map方法不会改变原始数组。 2. forEach方法: forEach方法会对数组中的每个元素调用一个回调函数,但它不会返回任何内容。通常,forEach方法用于执行一些操作而不需要返回结果,例如打印数组中的每个元素。与map方法不同,forEach方法无法返回修改后的数组。 3. filter方法: filter方法会对数组中的每个元素调用一个回调函数,并返回一个新的数组,新数组的元素是回调函数返回值为true的元素。例如,我们有一个数组[1, 2, 3, 4, 5],我们可以使用filter方法筛选出所有大于2的元素并返回一个新的数组[3, 4, 5]。与map方法类似,filter方法也不会改变原始数组。 这三种方法在遍历数组时具有不同的用途。map方法可以用于对数组中的每个元素进行转换或操作,并返回一个新的数组。forEach方法用于执行一些操作而不关心返回值。filter方法用于根据指定的条件筛选出符合条件的元素,并返回一个新的数组。根据具体情况,我们可以选择合适的方法来遍历数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值