#yyds干货盘点# 【js学习笔记十三】前端中的this指向问题

简介: #yyds干货盘点# 【js学习笔记十三】前端中的this指向问题

前言


我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷


导语


大家好 我是歌谣 对于平时中的一些问题还是有必要自己总结 有时候自己不总结很难了解全部


图片.png

情况1 默认this指向

console.log(this,"geyao") //window



直接在浏览器中 直接打印 找出this的指向是指向window


情况2 箭头函数方式

//箭头函数
   geyao=()=>{
     console.log(this,"geyao")//window
   }
   geyao();



箭头函数的指向指向外层的this


注意

//箭头函数
   geyao=()=>{
     console.log(this,"geyao")//window
   }
  //  geyao();
   //箭头函数不能作为构造函数
   new geyao()



箭头函数不能作为构造函数 报错 Uncaught TypeError: geyao is not a constructor


情况3 bind绑定

//bind绑定
  function geyao() {
    console.log(this)//geyao
  }
  geyao.bind("geyao").bind("fangfang")()



bind绑定以第一次绑定为准


注意

// 箭头函数
   geyao=()=>{
     console.log(this,"geyao")//window
   }
   geyao.bind("geyao").bind("fangfang")()



箭头函数中的this不会被修改


情况4 new绑定

function geyao() {
    console.log(this,"geyao") //geyao{}
  }
  new geyao()



new 对象的this指向当前的geyao对象


注意

//new优先级大于bind
  function geyao() {
    console.log(this,"geyao") //geyao{}
  }
  fangfang= geyao.bind("fangfang")
  new fangfang();



new 的优先级大于bind


apply用法

//apply用法
  function geyao(a,b){
  return a+b;  
}
function fangfang(a,b){
  return a-b;  
}
console.log(geyao.apply(fangfang,[4,2]));  //fangfang调用geyao的方法 6
console.log(fangfang.apply(geyao,[4,2])); //geyao 调用fangfang的方法 2


call用法

function geyao(a,b){
  return a+b;  
}
function fangfang(a,b){
  return a-b;  
}
//call用法
var a1 = geyao.call(sub,4,2);//6



区别在于通过 apply 调用时实参是放到数组中的,而通过 call 调用时实参是逗号分隔的


注意

//箭头函数的指向不会被apply改变
geyao=()=>{
     console.log(this,"geyao")//window
   }
   geyao.apply("fangfang")



箭头函数的指向不会被apply影响


注意

function geyao(){
     console.log(this,"geyao")//fangfang
   }
  fangfang= geyao.bind("fangfang")
  fangfang.apply("geyao")



bind中this不会被改变


情况5 对象.

function geyao() {
  console.log(this.fangfang) //fangfang
}
obj = { fangfang: "fangfang" }
obj.geyao = geyao
obj.geyao()

.


注意

geyao=()=>{
  console.log(this.fangfang) //window undefined
}
obj = { fangfang: "fangfang" }
obj.geyao = geyao
obj.geyao()



箭头函数的优先级更高


注意

function geyao() {
  console.log(this) //fangfang
}
obj = { fangfang: "fangfang" }
obj.geyao = geyao.bind("geyao")
obj.geyao()



bind的优先级比对象.高


情况6 直接调用

function geyao() {
  console.log(this) //windows
}
geyao()



全局调用直接指向windows



相关文章
|
29天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
26天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
29天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
41 5
|
27天前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
66 1
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
36 4
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
41 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
178 2
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
49 0
|
2月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
下一篇
DataWorks