#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



相关文章
|
11月前
|
JavaScript 前端开发 API
|
11月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
413 8
|
11月前
|
JavaScript 前端开发 容器
|
11月前
|
JavaScript 前端开发
|
11月前
|
存储 JavaScript 前端开发
|
11月前
|
移动开发 JavaScript 前端开发
|
11月前
|
存储 JavaScript 前端开发
|
11月前
|
JavaScript 前端开发
|
11月前
|
JavaScript 前端开发 开发者
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1312 14

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    874
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    401
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    305
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    271
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    399
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    582
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    605
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    186
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    527
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    343