扩展原型对象
什么是原型对象
在 Screeps 中,所有游戏实体(如 creep、lab、flag 等)都是由类(构造函数)实例化而来。类名通常首字母大写(如 Creep
),实例名则首字母小写(如 creep
)。
实例的属性和方法由其构造函数的原型对象决定。
下面的例子演示了如何定义类型和构造函数,并说明了原型对象的作用。
代码编辑器加载中...
在例子中,我们定义了 Person
类型和 PersonConstructor
类型,并声明了一个构造函数 Person
。其中,Person
构造函数的类型为 PersonConstructor
,而它的原型对象的类型为 Person
。
Screeps 的设计也是如此:例如,Creep
构造函数的类型是 CreepConstructor
,其原型对象的类型则是 Creep
。这种设计让我们可以灵活地扩展游戏对象的属性和方法。
扩展 Screeps 原型对象
前文介绍了 Creep
构造函数及其原型对象的类型,其他游戏对象也遵循类似的模式。结合类型合并的知识,我们可以在模块中通过 declare global
扩展同名全局类型。
下面的例子演示了如何扩展 Creep
类型本身及其原型对象。
代码编辑器加载中...
需要注意的是,在 Screeps 中,除了 RoomPosition
等,我们无法通过构造函数直接创建游戏对象。因此,扩展构造函数本身的实际用途有限。
扩展 Game
Game
是一个单例对象,虽然名称以大写字母开头,但它并不是构造函数。与 Creep
不同,Game
的类型就是 Game
,而不是 GameConstructor
。
代码编辑器加载中...
我们可以在 Game
对象上挂载全局方法和属性,便于数据共享和统一管理。
扩展 global(编写中)
在 Screeps 的 Node.js 环境中,global
对象类似于浏览器中的 window
,用于全局作用域。你可以将工具函数、全局变量或通用逻辑挂载到 global
,实现跨文件共享。同时也可以把一些缓存放在 global
中,减小 Memory 的占用。
常见用途包括:
- 挂载日志和调试工具
- 存储全局配置或缓存
- 提供通用方法(如路径查找、性能分析等)
- 挂载游戏对象的快捷访问方法
TODO:不同 Node.js 版本对 global
的写法可能有差异,需要调研一下。