封装
-
对象实质上就是属性和方法的容器,它的主要作用就是存储属性和方法,这就是所谓的封装
-
默认情况下,对象的属性是可以任意的修改的,为了确保数据的安全性,在TS中可以对属性的权限进行设置
-
只读属性(readonly):
- 如果在声明属性时添加一个readonly,则属性便成了只读属性无法修改
-
TS中属性具有三种修饰符:
- public(默认值),可以在类、子类和对象中修改
- protected ,可以在类、子类中修改
- private ,可以在类中修改
-
示例:
(function (){ // 定义一个表示人的类 class Person{ // TS可以在属性前添加属性的修饰符 /* * public 修饰的属性可以在任意位置访问(修改) 默认值 * private 私有属性,私有属性只能在类内部进行访问(修改) * - 通过在类中添加方法使得私有属性可以被外部访问 * protected 受包含的属性,只能在当前类和当前类的子类中访问(修改) * * */ private _name: string; private _age: number; constructor(name: string, age: number) { this._name = name; this._age = age; } /* * getter方法用来读取属性 * setter方法用来设置属性 * - 它们被称为属性的存取器 * */ // 定义方法,用来获取name属性 // getName(){ // return this._name; // } // // // 定义方法,用来设置name属性 // setName(value: string){ // this._name = value; // } // // getAge(){ // return this._age; // } // // setAge(value: number){ // // 判断年龄是否合法 // if(value >= 0){ // this._age = value; // } // } // TS中设置getter方法的方式 get name(){ // console.log('get name()执行了!!'); return this._name; } private set name(value){ this._name = value; } get age(){ return this._age; } set age(value){ if(value >= 0){ this._age = value } } } const per = new Person('孙悟空', 18); /* * 现在属性是在对象中设置的,属性可以任意的被修改, * 属性可以任意被修改将会导致对象中的数据变得非常不安全 * */ // per.setName('猪八戒'); // per.setAge(-33); per.name = '猪八戒';// 报错,因为setter设置了私有 per.age = -33; // console.log(per); class A{ protected num: number; constructor(num: number) { this.num = num; } } class B extends A{ test(){ console.log(this.num); } } const b = new B(123); // b.num = 33; /* class C{ name: string; age: number // 可以直接将属性定义在构造函数中 constructor(name: string, age: number) { this.name = name; this.age = age; } }*/ class C{ // 可以直接将属性定义在构造函数中 constructor(public name: string, public age: number) { } } const c = new C('xxx', 111); console.log(c); })();
标签:TypeScript,封装,name,age,number,value,._,属性 From: https://www.cnblogs.com/anjingdian/p/16929597.html