Typescript中class的码源分析
学习Typescript是一个很好的体验,一方面我们可以使用更加规范的代码去编程,另一方面,我们可以通过typescript的学习来加强对js的理解。
js中没有类的概念,它使用引用类型来封装对象,引用类型的定义依赖构造函数,所以我们在js中使用对象一般是先定义构造函数,然后使用new操作符进行实例化。
typescript中的class也是这样实现的。
一、Class中的访问修饰符
typescript中class有3种访问修饰符,分别是:
- public 声明的属性和方法在类的内部和外部均能访问到。
- protected 声明的方法和属性只能在类的内部和其子类能访问。
- 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的原理是使用构造函数模式及原型模式创建引用类型
分析一下