TypeScript基础入门 - 函数 - this(二)
转载
TypeScript基础入门 - 函数 - this(二)
项目实践仓库
https://github.com/durban89/typescript_demo.git tag: 1.2.3
为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。
npm install -D ts-node
后面自己在练习的时候可以这样使用
npx ts-node 脚本路径
函数
this
学习如何在JavaScript里正确使用this就好比一场成年礼。 由于TypeScript是JavaScript的超集,TypeScript程序员也需要弄清 this工作机制并且当有bug的时候能够找出错误所在。 幸运的是,TypeScript能通知你错误地使用了 this的地方。 如果你想了解JavaScript里的 this是如何工作的,那么首先阅读Yehuda Katz写的Understanding JavaScript Function Invocation and "this"。 Yehuda的文章详细的阐述了 this的内部工作原理,因此这里只做简单介绍。
this参数
继续上篇文章【TypeScript基础入门 - 函数 - this(一)】
this.suits[pickedSuit]的类型依旧为any。 这是因为 this来自对象字面量里的函数表达式。 修改的方法是,提供一个显式的 this参数。 this参数是个假的参数,它出现在参数列表的最前面,如下
function f(this: void) { // 确保`this`在这个独立功能中无法使用 }
我们添加一些接口,Card 和 Deck,让类型重用能够变得清晰简单些,代码如下
interface Card { suit: string; card: number; } interface Deck { suits: string[]; cards: number[]; createCardPicker(this: Deck): () => Card; } let deck: Deck = { suits: [ 'hearts', 'spades', 'clubs', 'diamods' ], cards: Array(52), createCardPicker: function (this: Deck) { return () => { let pickedCard = Math.floor(Math.random() * 52); let pickedSuit = Math.floor(pickedCard / 13); return { suit: this.suits[pickedCard], card: pickedCard % 13, } } } } let cardPicker = deck.createCardPicker(); let pickedCard = cardPicker(); console.log("card: " + pickedCard.card + " of " + pickedCard.suit);
运行后得到的结果类似如下
$ npx ts-node src/function_5.ts card: 3 of diamods
现在TypeScript知道createCardPicker期望在某个Deck对象上调用。 也就是说 this是Deck类型的,而非any,因此--noImplicitThis不会报错了。
本实例结束实践项目地址
https://github.com/durban89/typescript_demo.git tag: 1.2.4
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS7 + Python3 + Django(rest_framework) + MariaDB + nginx + uwsgi 部...
这是一个 Django 环境部署教程,也是一个我坑爹的 Django 环境部署记录: 开始撸代码之前有两点需要提醒: 本教程完美适配如题开发环境但不局限于此环境,其他开发环境仅需将命令操作转换为当前环境下的命令即可; 我写作的顺序是我个人体验比较好的操作顺序仅供参考; 开撸: 1. MariaDB 的安装与部署 # yum 安装 yum -y install mariadb mariadb-server mariadb-devel # 安装完成MariaDB,首先启动MariaDB systemctl start mariadb # 设置开机启动 systemctl enable mariadb # 接下来进行MariaDB的相关简单配置 mysql_secure_installation #首先是设置密码,会提示先输入密码 Enter current password for root (enter for none):# 初次运行直接回车 #设置密码 Set root password? [Y/n] # 是否设置root用户密码,输入y并回车或直接回车 New password: ...
- 下一篇
聊一聊Java如何接入招行一网通支付功能
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/81844046 1.前提条件 相比较于支付宝和微信的支付功能接入这一块,银行相对来说更加严格,比如说支付宝,在你签约之前可以进行一些测试。但是银行来说就不是这样了,如果您现在要进行招行的支付功能开发的话,请务必先让相关人员去进行签约 测试开发必须条件 进行测试开发之前有几个比较重要的东西是不可避免的,我们来看一下都是有什么: 商户号、商户分行号以及商户秘钥(具体明细请参考:http://link.cmbchina.com/open2/DOC/ToTest6.aspx) 验证码查询地址(测试环境招行所发的验证码都可以在此网站查询到http://121.15.180.69/GetMsgVerifyCode/Default.aspx) API文档(进行签约时招行一般会给我们一份文档,但是此文档也是很有参考价值的http://link.cmbchina.com/open2/API/APIdefault....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境