1.类 就是对象中属性和方法(opc原则 : (Open Closed Principle) 开/闭原则)
用class 声明 首字母大写的函数 然后new 他的实例
extendes继承 语法:class A extendes B { } ;
类属性或者静态属性 通过类创建 关键字static(首位)
其他一些关键字:
readonly(只读属性)
public(公共:默认) : 修饰属性可任意访问
private(私有) : 只能内部访问,关闭了访问方式
protected(受保护的类) : 只能在当前类和当前类的子类访问
class Names {
// name: string = '孙悟空'
// readonly age: number = 18
name: '孙悟空'
age: 50
static sayHello() {
console.log('大家好');
}
}
实例属性
const p = new Names()
console.log(p);
2.构造函数和this
constructor(){ } 声明的就是构造函数,通过this添加新属性.
new出来的实例对象中的this指向实例本身 ! ! !
3.继承
例如有一个animal动物类,new出来的实例有猫、狗、蛇等
子类会继承父类所有的方法和属性,如果有自己的方法,要在新类中去扩展,子类添加和父类相同的方法会被覆盖掉(称为方法的重写).
4.super
super()代表的是当前类的父类!
如果子类中写了构造函数,在子类构造函数中对父类的构造函数直接调用,会出错!
需要添加关键字 super() , 代表调用 . constructor中调用
constructor(){
super()
}
5.抽象类
无法被实例的类,称为抽象类.禁止去new 类,容易乱套
如果想使用抽象类中的属性或者方法,要使用关键字 abstract ,而添加了abstract的抽象方法,必须强制被继承,否则会出错!
6.属性封装
属性在对象中设置,是可以被随意修改的,因此会导致对象中的数据非常不安全!
ts语法支持在属性前加修饰符.
public : 公共(默认) private : 私有 (只能内部访问) protected : 受保护的类(父和子中访问)
private 通过类当中添加方法使私有属性可以被外部访问
get读取属性 set设置属性可改写
(function () {
class Person {
private _name: string;
private _age: number;
constructor(name: string, age: number) {
this._name = name;
this._age = age
}
get name() {
console.log('get name()执行了');
return this._name
}
set name(value) {
this._name = value
}
}
const per = new Person('孙悟空', 18)
per.name = '猪八戒'
console.log(per.name);
})()
protected例子
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);
6.泛型
属性的类型广泛性, 直接调用具有泛型的函数
直接出值,ts会自己推断设置泛型的值类型
或者可自己指定泛型的值
function fn<T>(a: T): T {
return a
}
let re = fn(20) //ts自己推断
let res = fn<number>(10) //指定泛型
7.接口 ( 核心基础 )
需要有面向对象的思维 反正有点难 我没理解太懂
使用interface关键字 , 接口定义一个规范标准 , 可以合并多个类的属性方法类似于 (水管之间的接口) 必须满足父类要求需要使用使用interface;
我们在写函数中会检查传入参数的类型,是否存在并匹配 . 就相当于一个约束,对参数个数类型要求好后 , 扩展的实例中都需要遵循他的原则,否则就不会被 " 连接 "进去,会报错
当子类遵循了父类的要求,就会被继承,随之而来的也就带着约束一起继承过来 , 但具体的值并不继承.就这样一层一层下去.
我的理解来说 : 就类似于水管子的接口 , 开始的水管子定义好了往后的接口的长短和大小,往下连接的必须使用开始的水管定义好的规格去向下相接才会连接...
(以上个人理解,如果不正确欢迎提出来哈,狗头保命嘻嘻~)
语法糖:
构造其中直接写值 相当于类中定义属性,构造器中this改变其指向
constructor中并且可直接定义属性类型和对属性的设置
class C {
constructor(protected name: string, protected age: number) {
}
}
const c = new C('xx', 16);
console.log(c);