# Class 对象

    class Class extends Object

Class(类) 对象表示一个类定义; 它包含静态方法和属性.

每个类对象都基于其继承的任何类, 如果没有指定, 则基于 Object. `Object` 基于 `Class.Prototype`, 其又基于 `Object.Prototype`, 因此类可以从任何这些基对象继承方法和属性.

"静态" 方法和属性是类对象本身拥有的任何方法和属性(因此不适用于特定实例), 而类实例的方法和属性则由原型拥有.

下面使用 "ClassObj" 作为任何类对象的占位符, 因为 "Class" 就是类本身. 通常, 使用类定义中给出的名称来引用类对象.

## 目录

- 方法:
  - Call: 构造类的新实例.
- 属性:
  - Prototype: 检索或设置对象, 其类的所有实例都基于此.

## 方法

### Call

构造类的新实例.

    Obj := ClassObj(Params*)
    Obj := ClassObj.Call(Params*)

静态方法通常从 Object, Array 或 Map 类继承. 它执行以下功能:

- 分配内存并初始化对象的二进制结构, 这取决于对象的原生类型(例如, 它是数组还是映射, 或者只是一个对象).
- 将新对象的基设置为 ClassObj.Prototype.
- 如果新对象有 __Init 方法, 则调用它的 __Init 方法. 此方法由类定义自动创建; 它包含类主体中定义的所有实例变量初始化器.
- 如果新对象有 __New 方法, 则调用它的 __New 方法. 所有传递给 Call 的参数都被转发到 __New.
- 返回新对象.

Call 可以被通过定义静态方法(如 `static Call()`) 在类定义中重写. 这允许修改类或阻止构造新实例.

注意, `Class()`(在这种情况下使用原义的 "Class") 可用于构造基于 `Class.Prototype` 的新的 Class 对象. 但是, 新对象最初没有 Call 方法, 因为它不是 Object 的子类. 通过给 Base 赋值使其成为 Object 的子类, 或 Call 方法重新实现或从其他类中复制. 在使用标准的 Call 方法实例化原型之前, 还必须创建原型并将其赋值给该类.

## 属性

### Prototype

检索或设置类的所有实例所基于的对象.

    Proto := ClassObj.Prototype

    ClassObj.Prototype := Proto

默认情况下, 类的原型包含类定义中定义的所有实例方法和动态属性, 可用于检索对方法, 或 getters/setters 属性的引用, 或定义一个新的. 脚本还可以定义新的值属性, 这些值充当所有实例的默认属性值.

类的 Prototype 通常基于其基类的 Prototype, 所以 `ClassObj.Prototype.base == ClassObj.base.Prototype`.

原型自动被定义为类定义创建的任何类对象的自身属性.

dftg