joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

在 TypeScript 中,一个类(class)可以拥有以下几种类型的属性:

  1. 实例属性(Instance properties)

    • 这些属性是在类的构造函数中使用 this 关键字定义的。
    • 每个实例都有自己独立的实例属性。
  2. 原型属性(Prototype properties)

    • 这些属性是定义在类的原型对象上的,所有实例共享同一个原型对象。
    • 可以通过类的方法定义(不使用 static 关键字)。
  3. 静态属性(Static properties)

    • 这些属性是直接添加到类本身的,而不是类的实例。
    • 通过使用 static 关键字定义。
  4. 私有属性(Private properties)

    • 使用 private 关键字定义的属性,只能在类的内部访问。
  5. 受保护属性(Protected properties)

    • 使用 protected 关键字定义的属性,可以在类的内部和继承类中访问。
  6. 只读属性(Readonly properties)

    • 使用 readonly 关键字定义的属性,只能在初始化时设置值,之后不能更改。

示例

class Example {
  // 私有属性
  private privateProperty: string;
  
  // 受保护属性
  protected protectedProperty: string;
  
  // 只读属性
  readonly readonlyProperty: string;

  constructor(public name: string) {
    // 实例属性
    this.privateProperty = 'This is a private property';
    this.protectedProperty = 'This is a protected property';
    this.readonlyProperty = 'This is a readonly property';
  }

  // 原型方法
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }

  // 静态方法
  static staticMethod() {
    console.log('This is a static method.');
  }

  // 访问私有属性的方法
  getPrivateProperty() {
    return this.privateProperty;
  }
}

// 创建实例
const instance = new Example('Alice');

// 访问实例属性
console.log(instance.name); // 输出: Alice

// 访问原型方法
instance.greet(); // 输出: Hello, my name is Alice

// 访问静态方法
Example.staticMethod(); // 输出: This is a static method.

// 访问私有属性
console.log(instance.getPrivateProperty()); // 输出: This is a private property

// 访问受保护属性(受保护属性不能在类外部访问,这里会报错)
// console.log(instance.protectedProperty); // 错误: Property 'protectedProperty' is protected and only accessible within class 'Example' and its subclasses.

// 访问只读属性
console.log(instance.readonlyProperty); // 输出: This is a readonly property

// 尝试修改只读属性(只读属性不能修改,这里会报错)
// instance.readonlyProperty = 'New value'; // 错误: Cannot assign to 'readonlyProperty' because it is a read-only property.

详细解释

  1. 实例属性

    • 定义:在类的构造函数中使用 this 关键字定义的属性。
    • 访问:通过类的实例访问。
    • 示例:
      constructor(public name: string) {
        this.name = name;
      }
      const instance = new Example('Alice');
      console.log(instance.name); // 输出: Alice
      
  2. 原型属性

    • 定义:通过类的方法定义(不使用 static 关键字),这些方法添加到类的原型对象上。
    • 访问:通过类的实例访问。
    • 示例:
      greet() {
        console.log(`Hello, my name is ${this.name}`);
      }
      const instance = new Example('Alice');
      instance.greet(); // 输出: Hello, my name is Alice
      
  3. 静态属性

    • 定义:使用 static 关键字定义,直接添加到类本身,而不是类的实例。
    • 访问:通过类本身访问,而不是通过实例访问。
    • 示例:
      static staticMethod() {
        console.log('This is a static method.');
      }
      Example.staticMethod(); // 输出: This is a static method.
      
  4. 私有属性

    • 定义:使用 private 关键字定义,只能在类的内部访问,外部无法直接访问。
    • 访问:通过类内部的方法访问。
    • 示例:
      private privateProperty: string;
      
      constructor() {
        this.privateProperty = 'This is a private property';
      }
      
      getPrivateProperty() {
        return this.privateProperty;
      }
      const instance = new Example('Alice');
      console.log(instance.getPrivateProperty()); // 输出: This is a private property
      
  5. 受保护属性

    • 定义:使用 protected 关键字定义,可以在类的内部和继承类中访问。
    • 示例:
      protected protectedProperty: string;
      
      constructor() {
        this.protectedProperty = 'This is a protected property';
      }
      
      // 受保护属性在子类中可以访问
      class SubExample extends Example {
        logProtectedProperty() {
          console.log(this.protectedProperty);
        }
      }
      
      const instance = new SubExample('Alice');
      instance.logProtectedProperty(); // 输出: This is a protected property
      
  6. 只读属性

    • 定义:使用 readonly 关键字定义,只能在初始化时设置值,之后不能更改。
    • 示例:
      readonly readonlyProperty: string;
      
      constructor() {
        this.readonlyProperty = 'This is a readonly property';
      }
      
      const instance = new Example('Alice');
      console.log(instance.readonlyProperty); // 输出: This is a readonly property
      

通过这种方式,我们可以看到在 TypeScript 类中定义和访问实例属性、原型属性、静态属性、私有属性、受保护属性和只读属性的方法。每种类型的属性有其特定的用途和访问方式。

posted on 2024-07-14 15:11  joken1310  阅读(1)  评论(0编辑  收藏  举报