首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript使用实例访问静态变量

TypeScript使用实例访问静态变量
EN

Stack Overflow用户
提问于 2015-05-23 00:36:08
回答 1查看 27.5K关注 0票数 9

因此,在大多数OOP语言中,静态变量也可以称为变量,即它们的值在该类的所有实例之间共享。例如,在我的游戏中,我有一个类Bullet,它由GreenBulletPinkBullet扩展。我希望这些子类有一个名为ammo的“类”或“静态”变量,这样我就可以跟踪特定弹药类型的弹药数量。但是这里有一个问题:我希望能够通过子类的一个实例访问这个属性。

示例:

代码语言:javascript
复制
var bullet: GreenBullet = new GreenBullet()
if (bullet.ammo <= 0)
    return;
bullet.shoot();
bullet.ammo --;

我希望GreenBullet的所有实例都知道他们弹药数量的变化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-23 01:26:33

第一个选项是创建静态变量的实例访问器:

代码语言:javascript
复制
class GreenBullet
{
   static ammo: number = 0;
   get ammo(): number { return GreenBullet.ammo; }
   set ammo(val: number) { GreenBullet.ammo = val; }
}
var b1 = new GreenBullet();
b1.ammo = 50;
var b2 = new GreenBullet();
console.log(b2.ammo); // 50

如果您希望Bullet的所有子类(包括它本身)都有单独的弹药计数,您可以这样做:

代码语言:javascript
复制
class Bullet
{
   static ammo: number = 0;
   get ammo(): number { return this.constructor["ammo"]; }
   set ammo(val: number) { this.constructor["ammo"] = val; }
}
class GreenBullet extends Bullet { }
class PinkBullet extends Bullet { }

var b1 = new GreenBullet();
b1.ammo = 50;
var b2 = new GreenBullet();
console.log(b2.ammo); // 50
var b3 = new PinkBullet();
console.log(b3.ammo); // 0

另外,我确信您不应该将子弹计数存储在静态变量中。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30407697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档