“茴”字有四种写法,this也是一样
说到这个地方又想起以前高中还是初中学的《孔乙己》这个梗,但是这里的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. 什么是前端适配 从UI展现层面上: 我们期望不同尺寸的设备,页面可以自适应的展示或者进行等比缩放,从而在不同的尺寸的设备下看起来协调或者差不多. 从代码实现层面上: 我们希望前端适配可以用用尽可 ...
- 茴字的四种写法—移动适配方案的进化
话说我刚工作的时候,就开始用rem了,过了没多久,接触到了flexible,系统化且支持iOS的retina屏迅速征服了我,最近又看到了大漠大神的vw.所以本文想完成一篇一站式的文章,可以系统的了解前 ...
- 编程代码风格之茴字有四种写法
(养成中午写blog的习惯) 一直以来注意代码风格. 最早的时候使用Visual Basic时,没有花括号{},也不需要;,靠换行和缩进来控制逻辑,遇到复杂的事情时候很着急,及至后来开始深入到C, J ...
- 回字有四种写法,阶乘verilog实现有几种方法?
回字有四种写法,阶乘verilog实现有几种方法? 方式一:普通方式实现阶乘计算: verilog代码: module tryfact; function[31:0]factorial; input[ ...
- 回字有四种写法,那你知道单例有五种写法吗
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 转自 ...
- 【转】回字有四种写法,那你知道单例有五种写法吗
目录导航 基本介绍 写法介绍 饿汉式 懒汉式 双重检测 内部类 枚举 总结 基本介绍 单例模式(Singleton)应该是大家接触的第一个设计模式,其写法相较于其他的设计模式来说并不复杂,核心理念也非 ...
- 单例模式( Single Pattern ): 不仅仅是回字的四种写法
单例模式作为入门编程人员面试必考题之一,也是被玩坏了, 猛然一搜尽然有七种写法,什么懒汉,饿汉五花八门, 这里参考已经比较不错的文章, 忽略五花八门的命名, 把单例模式不同写法按逻辑演进梳理一下, 方 ...
- python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)
毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y):retur ...
- 茴字的N种写法 (读《把脉VC++》笔记)
在Windows编程中有许多方法实现文件写入和读取,下面是<把脉VC++>中介绍的几种. 1.使用Windows API Windows API提供了CreateFile, WriteFi ...
最新文章
- 学界丨北大清华合力打造通用人工智能实验班,朱松纯教授领衔
- android 代码生成表格,AndroidExcel
- kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
- 赠书:算法与数据中台“网约车业务实践”
- 双系统,重装windows后修复linux的grub启动
- volatile不具备原子性
- 01. Node js Hello world
- di容器_DI容器是代码污染者
- 交际过程的两个基本环节_跨文化交际学概论笔记(二)
- 滚动效果--marquee的使用
- Windows和Linux DNS Cache清理
- 8plus基带电源供电线路_iPhone7显示手机无服务还有感叹号,基带通病问题,你中招了吗?...
- 2020中兴捧月算法大赛——傅里叶赛道 第1名方案
- 花一天时间体验 wintogo 到最终放弃
- 洛谷 P4238 【模板】多项式乘法逆
- android短信删除,Android删除短信的方法
- Quixel bridge无法导入到blender
- 在StarRocks中建立ClickHouseJDBC外表
- Webstorm2018激活和汉化
- python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作