this的理解与使用

简介: this的理解与使用

文章目录

this的语法理解

this在英文中是一个指示代词,表示  这;这个

顾名思义,在编程于语言里,this就是一个指代作用。
我在人民广场吃着炸鸡
小明也在人民广场吃着炸鸡
人民广场还有跳广场舞的阿姨
还有三只小猫在人民广场睡觉
这样表达没毛病,但是太过繁琐,如果把重复的人民广场用   这  来代替,就会变成:
我在人民广场吃着炸鸡

小明也在这吃着炸鸡

这还有跳广场舞的阿姨

还有三只小猫在这睡觉
如果在写代码的时候, 太多对象名字重复使用,会使代码看起来繁琐,不简洁,乱等等,我们就可以使用this来解决这个问题。接下来具体看看this究竟有些什么语法,以及怎么用?


一、this的绑定方式
1.默认绑定

      function fn(){
        console.log(this);
      }
      fn()


我们可以看到,函数在全局调用的时候,this默认指向window对象

2.隐式绑定

      var obj ={
        name:'亚索',
        age:'20岁',
        height:'185cm',
        weight:'150斤',
        ziliao:function(){
          console.log('姓名:'+ this.name);
          console.log('年龄:'+ this.age);
          console.log('身高:'+ this.height);
          console.log('体重:'+ obj.weight);
        }
      }
      obj.ziliao()

我们通过上面这个例子可以看到,当我们调用一个对象的方法时,就会出现隐式绑定,this会指向对象。如果不用this,也可以把this换成obj,是一样的,只不过this更方便。此时this指向当前对象,翻译为这个名字,这个年龄,这个身高,这个体重。
3.显式绑定

    var lol = {
      name:'阿卡丽',
      whatName:function(){
        console.log('我最爱的英雄是'+this.name);
      }
    }
    var hero1 ={
      name:'卡特琳娜'
    }
    var hero2 ={
      name:'卢锡安'
    }
    lol.whatName.apply(hero1)
    lol.whatName.apply(hero2)
    lol.whatName.call(hero1)
    lol.whatName.call(hero2)

这种方法可以指定this的绑定对象。call()与apply()的效果是完全相同的

4.构造函数绑定

    function People(name) {
      this.name = name;
      this.favour = function() {
        console.log('我最喜欢的英雄是' + this.name);
      }
    }
    var name = '卡特琳娜'
    var Lovename = new People('阿卡丽')
    Lovename.favour();


当我们new一个构造函数,得到的这个实例,它继承了构造器的构造属性以及原型上的属性。


5.箭头函数绑定


其实箭头函数是没有this的,如果想在箭头函数中用this。那么一定要把箭头函数嵌套在一个作用域内部,箭头函数的this指向取决于外层作用域中的this,外层作用域或函数的this指向谁,箭头函数中的this就指向谁。这有点继承的意思,但更重要的是,箭头函数本身没有this,如果绑定成功,则没有办法修改。

二、两个细节

1.严格模式

严格模式即'use strict'  


严格模式下,规定禁止this关键字指向全局对象window,此时this会绑定到undefined  


   function fn(){

           'use strict'

           console.log(this);

       }

       fn()    //打印结果为undefined      

               // 'use strict'   是一种声明关键词,告诉浏览器,此时是严格模式。  

2.如何更改this指向

一般的,我们常用call(),apply()方法来更改this指向


首先call(),apply()是函数自带的方法,在调用函数时,可以改变this指向。这一点在显示绑定里,有了详细的说明。


call方法接受的是一个实参列表,第一个实参指向this,其余实参赋给形参进入函数。

语法:

fn.call(this,参数2,参数3,参数4)

apply方法接受的是一个实参列表,第一个实参指向this,其余实参会在一个数组里,以数组为参数的形式赋值给形参进行传参

语法:

fn.apply(this,[参数2,参数3,参数4])

还有一个方法就是bind(),但是意义不大,有兴趣可以去MDN官网查看。


总结

1.this可用可不用,不用代码也能敲,需求也能实现,但用了方便


2.this常见的绑定方式,有默认绑定,隐式绑定,显式绑定,构造函数绑定,箭头函数绑定


3.严格模式下,规定this指向undefined


4.更改this指向的方法,常用call(),apply()


相关文章
|
8月前
|
消息中间件 中间件 Java
软件架构
【1月更文挑战第10天】软件架构。
69 2
|
8月前
|
弹性计算 运维 Serverless
阿里云Elasticsearch Serverless助力大型企业咨询公司大幅提升效能
阿里云Elasticsearch Serverless服务,提升了某大型企业咨询公司的数据查询速度和准确性,在实现成本可控的同时,帮助提高了企业效能并加强了客户服务能力。
418 0
|
8月前
|
安全 搜索推荐 网络安全
一文读懂什么是IP地址证书
IP证书,一种针对公网IP的SSL/TLS证书,确保通过IP地址访问的网站和服务安全。它提供数据加密、身份验证,防止流量劫持,适用于无域名或固定IP服务场景。申请需公网IP、有效管理权限且支持单或多IP绑定。选择CA时考虑认证、信任级别、兼容性和技术支持。对于依赖IP访问的服务,安装IP证书能增强安全性和用户信任,也有助于提升搜索引擎排名。
809 3
|
8月前
|
数据采集 监控 Kubernetes
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:采集配置错误问题。
454 0
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
链表OJ题(中)
链表OJ题(中)
207 0
Vue3+TypeScript学习笔记(十)
本节记录动态组件相关内容
81 0
|
NoSQL Redis Windows
Redis安装在Windows系统
Redis安装在Windows系统
Redis安装在Windows系统
|
JavaScript 前端开发 小程序
大前端进阶篇:es6语法中let和const解决了什么问题
大前端进阶篇:es6语法中let和const解决了什么问题
大前端进阶篇:es6语法中let和const解决了什么问题
|
JavaScript
JSPatch下发笔记4
JSPatch下发笔记4
132 0