说到这个地方又想起以前高中还是初中学的《孔乙己》这个梗,但是这里的this显然实用性比那个要大很多,哈哈。

  简单来说,this有四种应用场景,分别是在构造函数上、对象属性中、普通函数中、call和apply方法中。

  先来看第一种,构造函数:

1 function Foo(name){
2             this.name=name;
3         }
4
5         var f=new Foo();

  在这里,this指向的是新对象f。而在对象属性中,这又有了一点不同。

1 var obj={
2             a:"funny",
3             b:function(){
4                 console.log(this.a);
5             }
6         };
7
8         obj.b();//打印出funny

  这里我们把b作为obj对象的一个属性来执行,执行的时候this就指向当前这个对象obj,所以在控制台会打印出funny;接下来看第三种情况,就那这个例子来说,我们稍微改动一下代码。

1         var obj={
2             a:"funny",
3             b:function(){
4                 console.log(this.a);
5             }
6         };
7
8         var f1=obj.b;
9         f1(); //打印出undefined

  在第九行中,我们执行f1发现根本取不到“funny”,而是打印出undefined。原因就是当我们这样作为一个普通函数执行的时候,this指向window对象的,而window对象下找不到a这个属性,于是就打印出undefined。顺便说一句,如果是找不到一个属性,会返回undefined;而找不到一个变量,则会返回“xxx is not defined”。

  最后一种情况,在call和apply中。其实我们可以把call和apply当成一种特殊的执行方法。可以叫它“能自定义this指向的执行方法”,这个名字听起来是不是有点长,但原理的确如此。就是说当我们直接来一个f1()的时候,它的this默认为window。要改变怎么办呢?就要来点特殊执行手段,在中间多插入一个单词---call或者apply。

  

1         var obj={
2             a:"funny",
3             b:function(){
4                 console.log(this.a);
5             }
6         };
7
8         var f1=obj.b;
9         f1.call({a:"serious"}); //改变了this的指向,指向这个新对象,打印出serious

  还是这段代码,不过我稍微改了下,把它的this的指向扭了一下,最终指到我自己写的{a:"serious"}这个对象,然后就可以把serious打印出来了。apply和call差不多,因为这里我只传了一个参数,所以没法演示。call-->第一个参数为this,后面为其他参数;apply-->第一个参数为this,后面为用数组包裹起来的其他参数。就这么点区别。

  应该还不错吧(`・ω・´)

  

转载于:https://www.cnblogs.com/zhangnan35/p/8414241.html

“茴”字有四种写法,this也是一样相关推荐

  1. 茴字的四种写法——浅谈移动前端适配

    1. 什么是前端适配 从UI展现层面上: 我们期望不同尺寸的设备,页面可以自适应的展示或者进行等比缩放,从而在不同的尺寸的设备下看起来协调或者差不多. 从代码实现层面上: 我们希望前端适配可以用用尽可 ...

  2. 茴字的四种写法—移动适配方案的进化

    话说我刚工作的时候,就开始用rem了,过了没多久,接触到了flexible,系统化且支持iOS的retina屏迅速征服了我,最近又看到了大漠大神的vw.所以本文想完成一篇一站式的文章,可以系统的了解前 ...

  3. 编程代码风格之茴字有四种写法

    (养成中午写blog的习惯) 一直以来注意代码风格. 最早的时候使用Visual Basic时,没有花括号{},也不需要;,靠换行和缩进来控制逻辑,遇到复杂的事情时候很着急,及至后来开始深入到C, J ...

  4. 回字有四种写法,阶乘verilog实现有几种方法?

    回字有四种写法,阶乘verilog实现有几种方法? 方式一:普通方式实现阶乘计算: verilog代码: module tryfact; function[31:0]factorial; input[ ...

  5. 回字有四种写法,那你知道单例有五种写法吗

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 转自 ...

  6. 【转】回字有四种写法,那你知道单例有五种写法吗

    目录导航 基本介绍 写法介绍 饿汉式 懒汉式 双重检测 内部类 枚举 总结 基本介绍 单例模式(Singleton)应该是大家接触的第一个设计模式,其写法相较于其他的设计模式来说并不复杂,核心理念也非 ...

  7. 单例模式( Single Pattern ): 不仅仅是回字的四种写法

    单例模式作为入门编程人员面试必考题之一,也是被玩坏了, 猛然一搜尽然有七种写法,什么懒汉,饿汉五花八门, 这里参考已经比较不错的文章, 忽略五花八门的命名, 把单例模式不同写法按逻辑演进梳理一下, 方 ...

  8. python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

    毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y):retur ...

  9. 茴字的N种写法 (读《把脉VC++》笔记)

    在Windows编程中有许多方法实现文件写入和读取,下面是<把脉VC++>中介绍的几种. 1.使用Windows API Windows API提供了CreateFile, WriteFi ...

最新文章

  1. 学界丨北大清华合力打造通用人工智能实验班,朱松纯教授领衔
  2. android 代码生成表格,AndroidExcel
  3. kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
  4. 赠书:算法与数据中台“网约车业务实践”
  5. 双系统,重装windows后修复linux的grub启动
  6. volatile不具备原子性
  7. 01. Node js Hello world
  8. di容器_DI容器是代码污染者
  9. 交际过程的两个基本环节_跨文化交际学概论笔记(二)
  10. 滚动效果--marquee的使用
  11. Windows和Linux DNS Cache清理
  12. 8plus基带电源供电线路_iPhone7显示手机无服务还有感叹号,基带通病问题,你中招了吗?...
  13. 2020中兴捧月算法大赛——傅里叶赛道 第1名方案
  14. 花一天时间体验 wintogo 到最终放弃
  15. 洛谷 P4238 【模板】多项式乘法逆
  16. android短信删除,Android删除短信的方法
  17. Quixel bridge无法导入到blender
  18. 在StarRocks中建立ClickHouseJDBC外表
  19. Webstorm2018激活和汉化
  20. python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作

热门文章

  1. Vue:项目使用vue-particles实现动态粒子效果作为背景显示
  2. 使用百度api获取经纬度的偏差问题
  3. 夺命雷公狗---无限极分类NO5
  4. Hook 微信的二维码的call
  5. Kubernetes API Aggregator 是什么
  6. fastadmin 加入layui图片弹窗
  7. ASPCMS常用标签
  8. 计算机设计大赛——微课与教学辅助二
  9. 计算机组成原理唐朔飞难点,《计算机组成原理》唐朔飞 重点、难点.ppt
  10. 74、消防安全重点单位申报备案的要求