Skip to content

Commit fb7c7a5

Browse files
committed
更新TypeScript中的getter和setter,并用ts来实现一个简单的单例模式
1 parent 22d8a21 commit fb7c7a5

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

docs/TypeScript/README.md

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ npm install -g ts-node
6767
ts-node xx.ts
6868
```
6969
## 静态类型的深度理解
70-
 静态类型的变量不仅类型不能修改,而且意味着这个变量的属性和方法基本已经确定了。正是因为这样,我们在编辑器使用静态类型的时候会给我们很好的语法提示。
70+
  静态类型的变量不仅类型不能修改,而且意味着这个变量的属性和方法基本已经确定了。正是因为这样,我们在编辑器使用静态类型的时候会给我们很好的语法提示。
7171
## 基础类型和对象类型
7272
### 基础类型
7373
基础类型:`number``string``bollean``null``undefined``symbol``void`
@@ -127,7 +127,7 @@ let count = 123
127127
```
128128
如果 `TS` 能够自动分析变量类型,我们就什么都不需要做了。反之,我们就需要使用类型注解。
129129
## 函数相关类型
130-
 首先我们收一下TS的几种定义函数的方式和JS是一样的
130+
  首先我们收一下TS的几种定义函数的方式和JS是一样的
131131
```js
132132
function hello () {}
133133
const hello = function () {}
@@ -529,4 +529,35 @@ class Teacher {
529529
const teacher = new Teacher(18)
530530
console.log(teacher.name) // haochyk
531531
console.log(teacher.age) // 18
532-
```
532+
```
533+
## Setter和Getter
534+
我们首先来说下`getter``setter`的作用是:其实是为了保护类的私有属性,对私有属性的一个加密,我们通过代码来看下:
535+
``` ts
536+
class Demo {
537+
constructor (private _name: string) {}
538+
get name () {
539+
return this._name + 'a48dsi39xls2'
540+
}
541+
set setName (name: string) {
542+
this._name = name
543+
}
544+
}
545+
const demo = new Demo('haocyk')
546+
console.log(demo.name) // 'haocyka48dsi39xls2'
547+
demo.setName('haochyk')
548+
```
549+
然后我们再来说一下如何使用`TypeScript`来实现一个单例模式(一个类只能被实例化一次):
550+
``` ts
551+
class Demo {
552+
private static instance: Demo;
553+
private constructor () {}
554+
static getInstance () {
555+
if (!this.instance) {
556+
this.instance = new Demo()
557+
}
558+
return this.instance
559+
}
560+
}
561+
const demo = Demo.getInstance()
562+
```
563+
  首先我们要做的第一件事情就是控制住类的构造函数不能在外部调用,所以我们把类的构造函数设置成私有属性,这个时候该如何实例化一个类呢:monocle:,我们在类中定义一个方法提供给外部使用,由于我们没办法实例化类该怎么调用实例化类上的方法,所以我们要用`static`,直接将方法挂载到类上而不是挂载到实例化对象上,这样我们就可以通过`demo.getInstance()`来实例化`demo`这个类了,但是换句话说了,这样还不是照样可以无限实例化类嘛,实例化出来的对象指针还都不是一样的,我们接着往下看,我们在类上在通过`static`的方式挂载一个属性,将它设置为私有属性,在g`etInstance`方法中判断,如果是初始化第一次实例化这个类,我们就讲实例化对象绑定在这个`instance`属性上,最后返回出去,如果有的话,我们直接将`instance`返回出去,这样我们就实现了一个最简单的单例模式。

0 commit comments

Comments
 (0)