Typescript中class的码源分析

学习Typescript是一个很好的体验,一方面我们可以使用更加规范的代码去编程,另一方面,我们可以通过typescript的学习来加强对js的理解。

js中没有类的概念,它使用引用类型来封装对象,引用类型的定义依赖构造函数,所以我们在js中使用对象一般是先定义构造函数,然后使用new操作符进行实例化。

typescript中的class也是这样实现的。

一、Class中的访问修饰符

typescript中class有3种访问修饰符,分别是:

  1. public 声明的属性和方法在类的内部和外部均能访问到。
  2. protected 声明的方法和属性只能在类的内部和其子类能访问。
  3. private 声明的方法和属性只能在其类的内部访问。

对于protected 和 private 是应用在class的继承中,下一篇文章会讲到类的继承。

要说明的是: ts中的class的访问修饰符只在编码阶段有效,在ts编译成js后,是没有作用的。

 1 class Person {
 2     public name: {
 3         firstName: string,
 4         secondName: string
 5     };
 6     protected age: string;
 7     private sex: string;
 8     constructor(name: {firstName: string,secondName: string}, age, sex) {
 9         this.name = name;
10         this.age = age;
11         this.sex = sex;
12     }
13     sayName() {
14         console.log(this.name);
15     }
16 }

编译成js代码的结果:

 1 var Person = (function () {
 2     function Person(name, age, sex) {
 3         this.name = name;
 4         this.age = age;
 5         this.sex = sex;
 6     }
 7     Person.prototype.sayName = function () {
 8         console.log(this.name);
 9     };
10     return Person;
11 }());

可以发现,在编译成js后,是没有体现访问修饰符的

二、Class的原理是使用构造函数模式及原型模式创建引用类型

分析一下

猜你喜欢

转载自www.cnblogs.com/wangtingnoblog/p/10390696.html