属性和方法

  1. /* 在TS中对类的定义 */
  2. class Cat_3101 {
  3. name: string;
  4. sayHello(): string {
  5. return 'Hello, ' + this.name;
  6. }
  7. }
  8. let tom = new Cat_3101();
  9. tom.name = 'Tom'
  10. console.log(tom.sayHello());

image.png

答案

BC

解析

类的属性默认为实例属性,类的方法默认为实例方法。访问控制修饰符章节会详细介绍。

new Animal() 使用 new 关键字对类 Animal 进行了实例化并返回实例化结果。

new Animal().getAge() 链式写法,可以看作是 (new Animal()).getAge() 的省略写法。使用 new Animal() 得到类 Animal 的实例,接着实例执行 getAge 方法。

Animal.age 当属性为静态属性(方法)时,可以直接使用类名调用该属性(方法)。

下图示意了静态属性和实例属性的区别,实例属性(方法)存在于实例对象中,每个实例对象都会单独拥有。静态属性(方法)存在于类中,所有实例对象共享静态属性(方法)。
属性和方法 - 图2
我们开始分析四个选项:

  • A - age 是类的实例属性,选项中 Animal.age 是静态方法的调用方式。故错误。
  • B - 选项中使用 this.age 是正确的。 this 指向实例对象。
  • C - 选项中 new Animal().age 调用是正确的。因为 age 是类的实例属性。
  • D - 基于 C选项可以看出,此选项是错误的。

类的构造函数

/* 类的构造函数 */
class Cat_3102 {
    name: string;
    constructor (name: string) {    // // 使用constructor
        this.name = name
    }
    sayHello(): string {
        return 'Hello, ' + this.name;
    }
}

let tom_3102 = new Cat_3102("Tom");

console.log(tom_3102.sayHello());

image.png
类的构造函数主要用于,创建类的时候初始化类的成员变量属性。构造函数会在类的对象创建时候自动调用。需要注意的是父类的构造函数需要手动调用,因为构造函数主要用于初始化操作,故没有返回值。