typescript get方法_typescript专题(六) 类及其高级应用

欢迎来到我专题文章【typescript】,更多干货内容持续分享中,敬请关注!

就是前几天,尤大神突然宣布vue3.0 pre-alpha的源码在github上开源,吓得我赶紧去围观了一下,看了下其中的源码。全是基于ts编写的,然后一脸蒙蔽的退出来了。

我太难了。。。

a25823bb89e0863d187f255433ab5fad.png

所以,想阅读源码,学习typescript已经是刻不容缓了。

上章回顾:

  • 从0~1基于webpack搭建了一个简单的ts项目
  • 介绍了装饰器在typescript中的基本使用

本章目标:

  • 在ES中的类的基本使用
  • ts类的存取器,及基本质是什么
  • 泛型类的基本使用

在ES中的类的基本使用

在ES6之前,前端开发者想要使用面向对象编程,不得不用function 来模拟类,然后通过原型prototype去编写类的方法。具体的使用我前面的专题《JS从入门到不放弃》早有介绍,这里就不再赘述了。

自从ES6出现了,我们终于可以后端php,java,python他们那样通过class关键字来定义类了。它长这样:

class Person{ constructor(name,age){ this.name = name; this.age = age; }  say(){ console.log(this.name + 'say ...') }}

ts中的类

那么作为JS的超级的typescript,它在类的特性上都有哪些增强呢?

一、类的方法和属性成员私有化

我们在ES6中定义的类的属性和方法默认都是公共的,也就是说,实例化类的对象可以访问到类的所有的属性和方法。

从某种意义上来说,js中的类和java,C#中的类还有是一些差距的,好在typescript完美的帮我们解决了这个问题。

在typescript中,我们可以使用private 和public关键字来定义类的方法和属性成员。像这样

a2eb334b37c55df8481c757ffe36af43.png

我们实例化一个Person类的时候,然后通过类的对象去访问类的私有属性时,ts的语法已经通不过了。提示信息已经说的很清楚。

二、类的属性的存取器(getter,setter)

了解过java和C#的都知道,在类中可以给属性添加get和set方法,当我们获取和设置属性的时候,可以触发对应的方法。

那么刁的功能,typescript肯定也不能落下呀。于是它也搞了一个出来,我们来看下它怎么用

8de24f3846615e56c74efdeaf6026072.png

接下来我们实际运行一下

c5dc1bdc424a7b14d7f29c654324dd4b.png

错了?

这是因为默认ts会将它编译成es3,这里我们在编译的时候需要指定一下target参数。我们需要这样去编译

664e289a0698ec38968e174cf2f131b9.gif

编译的时候记得指明 --target es5

可以看到,当我们获取和设置了age 属性的时候,对应的get和set方法都被触发了。

一看到这个get和set,很容易联想到vue的数据劫持也有一个get 和set方法,功能类似,我们不妨去看看ts编译后的代码吧

144312c5dee40f10c01c4d47f62a5be8.png

哈哈哈,看到这段代码,熟悉vue原理的都能明白,它就是这么干的。

不得不说typescript 厉害呀

泛型类

前面我说到了泛型的基本用法,普通的ts约束只能限制变量为某一种类型,而这种往往不能满足一些特有的需求,还好有泛型来救场

泛型类的定义,我们只需要在类名后加了泛型即可,像这样

f9d8ca84da787be0d0fbf83d7fe436a5.png
18383504e7eb3ac556f835fee1a95a25.png

我们定义了一个泛型类,并且在实例化的时候指定类型为number 当我们add 一个字符串的时候,编辑器已经给我们详细的提示了。

总结:

  • typescript针对es6中的类做了一些功能增强。
  • typescript中的class 中的get 和set的使用,内部原理其实就是使用的ES5的Object.defineProperty来实现的。
  • 泛型类的基本使用

这里是【畅哥聊技术】的typescript专题系列。更多内容持续更新中。。。

未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值