zl程序教程

您现在的位置是:首页 >  其他

当前栏目

TS之类的属性和方法

属性方法 TS 之类
2023-09-11 14:19:18 时间

声明

我们用关键字class来声明一个类

class Person{
	...
}

属性

在TS中类的属性一共有三种,在属性面前添加相应的修饰符便可

属性分类

class Person{
	name:string = "zhubajie" // 实例属性
	static age = 89 // 类属性
	readonly addr:string = "高老庄" // 只读属性
}

实例属性

  • 直接定义的属性属于实例属性
  • 他必须通过类实例化之后才能使用

类属性

  • 以static开头的属性为类属性
  • 他可以通过类直接访问 Person.age

只读属性

  • readonly定义的属性为只读属性,不可修改

属性修饰符

  1. pubilc 公共属性,可以再任意位置访问和修改(实例属性,实例化之后访问)
  2. private 私有属性,只能在类的内部进行访问和修改(一般声明的时候我们会以_开头)
  3. protected 受保护的属性,只能在当前类和当前类的子类中进行访问
class Person{
    public name = "SunWuKong"
    private age = 30
    protected sex = "male"
}

const person = new Person()
console.log(person.name)
console.log(person.age) // 错误 只能在Person这个类中进行访问
console.log(person.sex)  // 错误 只能在Person这个类和其子类中访问

此外,还有readOnly属性,以他修饰的属性只能读取不能修改

getter与setter

类中的每一个属性内置getter方法和setter方法

  • getter方法用于获取属性
  • setter 方法用于设置属性

这样,我们可以对属性读取和操作做一些拦截,设置如下

class Person1{
    private _name:string
    constructor(name:string){
        this._name = name;
    }

    set name(value:string){
        this._name = value
    }

    get name(){
        return this._name
    }
}
  • 当我们进行读取的时候,其实是走的get这个逻辑
  • 当我们对于属性进行赋值的时候,其实是搜的set 这个逻辑

方法

static(静态方法)

经过static关键字修饰的方法属于类方法,可以通过类直接使用

class BaJie{
    name = "BaJie"
    static age = 18
    static sayName(){
        console.log("八戒")
    }
}

// 通过类直接访问
BaJie.sayName()
console.log(BaJie.age);

const bajie = new BaJie()
bajie.sayName() // 实例化之后不可访问

当有不规范的语法的时候,ts就不会进行编译,如上面的编译如下

var BaJie = /** @class */ (function () {
    function BaJie() {
        this.name = "BaJie";
    }
    BaJie.sayName = function () {
        console.log("八戒");
    };
    BaJie.age = 18;
    return BaJie;
}());
// 通过类直接访问
BaJie.sayName();
console.log(BaJie.age);

实例方法

  • 在类中直接定义的方法为实例方法,没有任何关键字的修饰
  • 这种方法只能在类实例化之后进行使用
class BaJie{
    name = "BaJie"
    age = 18
    sayName(){
        console.log("八戒")
    }
}

// 通过类直接访问
BaJie.sayName() // 错误的访问方法
console.log(BaJie.age); // 错误的访问方法
// 同样,实例化之后也是可以访问的
const bajie = new BaJie()
bajie.sayName() 
console.log(bajie.name);

菜鸟教程