先说一声对不起,这篇文章本应该是昨天写的。(强行假装有很多人在等着看)

昨天聚众饮酒去了,喝醉了,可能喝了有两百多瓶吧。

有人就说啦,唉麒麟子,你怎么老爱吹牛*,动不动就两百多瓶,你真当自己是牛么。

大家不要急嘛,之所以说两百多瓶,就是想证明我昨晚确实喝醉了,醉得来都记不起喝了多少了。

还有什么能比这个不靠谱的数字更能说明问题的么?


一、function与this

const {ccclass, property} = cc._decorator;@ccclass
export default class NewClass extends cc.Component {// LIFE-CYCLE CALLBACKS:private _dontBBAnyMore:string = '不要再说了';start () {//方式一setTimeout(function(){console.log(this);this.dontBBAnyMore();}.bind(this),100);//方式二var self = this;setTimeout(function(){console.log(this);self.dontBBAnyMore();},100);//方式三setTimeout(this.dontBBAnyMore.bind(this),100);//方式四setTimeout( () => {console.log(this);this.dontBBAnyMore();},100);}dontBBAnyMore(){console.log(this);console.log(this._dontBBAnyMore);}
}

学过C++,JAVA, C#的人都知道,成员函数默认是有一个this驱动的。上面的代码中,我们演示了一个setTimeout回调,方式一和方式二中console.log(this);的打印值我们可以看到,this并不是我们的NewClass。而是Window(部分浏览器会是undefined),这是为什么呢。这要从函数说起。

我们可以简单认为,setTimeout在计时器触发的时候,会这样来使用我们传入的函数  callback();

这样的调用方式,会使用当前的this作为传参。

为了更深刻的理解这个问题,我们可以简单地向下面这样来理解。

1、骚气的Function是一个对象,对象有一个 _thisArg 属性

2、如果我们直接调用callback()这样的函数,它会使用他的 _thisArg 来替换我们代码中的 this ,如果 _thisArg 属性为空,在某些平台上,会以Window形式出现。在另一些平台上,直接就是undefined.

3、如果我们调用了callback.bind(this) 并把callback传递给其他调用者,那么相当于callback的 _thisArg 被提前赋值了,那么你调用callback();也会使用 _thisArg 来替换代码中的 this

回过头去看,你会发现,世界如此奇妙。


二、 () => {} 是什么

简单的理解就是 () => {} 这样的函数,他会帮你bind(this)
 
[随便找了一篇文章,大家可以看看]


三、为什么要self

说到这个时候,肯定就有人会说啦。既然bind这么屌,为什么还要self呢。

答案其实你们应该能猜到。 无非就两种。

1、这样写 TS上有自动提示

2、可读性好很多

3、我愿意

4、我看好多人也这样写的

这一段好像没什么好说的,说多了就跑题了。大家选一个能够说服自己的理由就行。


四、写在最后

今天虽然标题起得很屌,XXXX详解。

但实际上,这是一个老生常谈的基础问题。

小学三年级就应该会的。

然而这是社区出现最多的问题。

不写这个知识点吧,老有人问。

要真写了这个知识点吧,肯定又有人说,麒麟子就整这些没用的,忽悠小朋友。

反正嘴在你们身上,说什么都可以。你们爽就行。

散会,开饭!!!!

麒麟子Cocos Creator实用技巧十:function this self ()={}详解相关推荐

  1. 麒麟子Cocos Creator实用技巧

    麒麟子Cocos Creator实用技巧 大家好,我是麒麟子, 开源棋牌<幼麟棋牌-四川麻将>(泄漏版叫 <达达麻将>)作者,成都幼麟科技创始人. 自09年进入游戏行业以来,不 ...

  2. 麒麟子Cocos Creator实用技巧八:回合战棋类RPG战斗效果

    HELLO,大家好,我是麒麟子.作为Cocos社区高产用户,今天又给大家带来了一个看起来很酷,但实际上大多数人用不到的DEMO. 不知道大家是否记得梦幻西游.问道.英雄无敌.仙剑奇侠传.神仙道.神曲O ...

  3. 麒麟子Cocos Creator实用技巧六:游戏背景拖拽实现

    麒麟子做了一个DEMO给大家,这个DEMO很简单,大家可以按下鼠标,或者在手机上按住不放. 拖拽背景,背景会根据拖拽移动. 同时会保证背景边缘不会越过父节点的上下左右边界 在线演示:https://q ...

  4. 麒麟子Cocos Creator实用技巧七:方向与角度转换

    麒麟子做了一个Demo给大家,向大家演示了方向转角度,角度转方向的应用. Demo中有两个坦克,中间的坦克锁定了另一个坦克,始终把自己的炮口对准它,并且会不停地发朝另一个坦克发射炮弹. 发出来的炮弹会 ...

  5. 麒麟子Cocos Creator实用技巧一:如何正确地显示微信头像

    不管是游戏App,还是H5,又或者是微信小游戏.但凡接入了微信登录的应用,都可能需要显示微信头像. 在Cocos Creator中,我们常见的显示方法像下面这样 var headimg = 'http ...

  6. 麒麟子Cocos Creator实用技巧五:技能CD效果制作

    今天带给大家的是一个关于技能CD的效果制作. 此效果不仅可以用于技能CD,一些按钮的CD也是可以用的. 为了照顾大家迫不及待(猴急)的心情,我写了一个DEMO给大家.DEMO上面做了5个英雄的技能和一 ...

  7. 麒麟子Cocos Creator实用技巧二:微信名字截断(支持表情)

    在我们日常游戏开发中,经常会面临将玩家名字截断的需求. 假如玩家是在我们游戏中创建的名字,那么可以简单粗暴地禁止玩家使用手机表情输入即可. 但如果我们是第三方账号登录,且使用了第三方账号的用户昵称,那 ...

  8. 麒麟子Cocos Creator实用技巧四:打包原生App截图白屏解决方案

    大家在做棋牌App或者一些特定需求的时候,需要截取当前游戏屏幕内容保存. 我们一般是采用cc.RenderTexture来截图并保存到游戏的可写目录 有时候会遇上,截出来的图片是白屏,或者部分白屏. ...

  9. 麒麟子Cocos Creator 3D研究笔记十:【qfw】开源的Extension Pack for Cocos Creator 3D

    零.写在前面 愿你活得烈马青葱,不为他人的目光所累 ---嗯! 阿子也不知道这个句子的原始出处,但就想把它分享给大家.专心写好自己的BUG,让别人说去吧! 在进入今天的正文之前,阿子想给大家聊聊最近使 ...

最新文章

  1. PHP替换字符串函数strtr()和str_replace()
  2. Deep Learning(深度学习)学习笔记整理系列之(五)
  3. 普宁二中高考2021成绩查询,普宁二中2019高考喜报成绩、本科重本上线人数情况...
  4. Centos 7 查看内存占用情况相关命令
  5. oracle 无法解析指定的连接标识符
  6. 解决北京户口,中科院计算所校招,CV/图像处理工程师,博士优先
  7. 虚拟服务器怎么安装网站,虚拟主机如何安装网站个人博客(WordPress)
  8. 云小店商城源码修复30套模板支持一键对接各大系统
  9. 黑马程序员全套Java教程_Java基础教程_目录
  10. 什么是ActiveRecord
  11. 开启FTP的21端口
  12. 多用途通讯录短信定位获取系统(安卓Android+苹果IOS+双端)带视频教程
  13. Netflix Media Database - 起源和数据模型
  14. PLC若想实现以太网口无线通讯,需要具备哪些条件?
  15. 动态域名解析ipv6 群辉dnspod_使用DNSpod动态解析访问黑群晖教程
  16. 按键精灵连接远程mysql_【按键精灵】按键精灵读取github page 网页,实现脚本远程控制功能...
  17. DataCastle X WAIC | 2022世界人工智能大会AI开发的数据基础分论坛即将举行!
  18. C++字符串常用输入方法
  19. 嵌入式系统——复杂指令集系统与精简指令集系统(CISCRISC)
  20. Element组件(input输入框)

热门文章

  1. DM-VIO论文翻译
  2. js文件json解析,建数据表插入保存
  3. 经典版扫雷游戏的实现(含展开)
  4. 用c++和SFML实现简易的界面版贪吃蛇
  5. 开源!类美团外卖Maven仓库一键切源码工具
  6. 小米只能进fastboot(bl已解)救砖
  7. 一个数学残的CRPS笔记(连续概率排位分数 Continuous Rank Probabilistic Score)
  8. 撷英阁-开卷有益之怎么写读书笔记
  9. android .join,悟饭游戏厅(com.join.android.app.mgsim.wufan.mha) - 3.6.4.4 - 应用 - 酷安
  10. 吉布斯采样(Gibbs Sampling)