2014-10-07 71 views
0

为了让我的程序顺利运行,我只能在需要时才创建对象。在我的情况下,我想查看一个未指定类的对象是否为null,如果不是,则调用它来初始化它。 (我觉得“初始化”是正确的说法,纠正我,如果我错了)在Actionscript 3.0中初始化未知类型

if (someObject == null) { 
    someObject = new someObject.class() 
} 

显然,这个代码不起作用。这个想法看起来不错,但Actionscript不同意我。这怎么能实现?

编辑 - 也许这将有助于简化(或复杂化)答案。我知道someObject扩展我的班级SuperClass。我可以使用SuperClass的房产来实例化someObject吗?

回答

1

我打算试图找到一个有用的答案的正确轨道。

首先,看你的例子:

if (someObject == null) { 
    someObject = new someObject.class() 
} 

我不知道你要在这里表达什么。如果someObjectnull,则无法从中提取有关任何信息。即使你键入someObject如:

var someObject:Sprite; 

您不能访问有关的事实,性质someObject期待信息Sprite *

*您可以使用describeType()访问类型,如果someObject是其成员一个班,但不要去那里。

如果你想能够:

  1. 检查特定类的实例存在,如果没有;
  2. 创建指定类的实例。

您可以编写类似:

var existing:Object = { }; 

function findOrMake(type:Class):* 
{ 
    var key:String = type.toString(); 

    if(!existing.hasOwnProperty(key)) 
    { 
     // We need to make a new instance of this class. 
     existing[key] = new type(); 
    } 

    return existing[key]; 
} 

哪些可以像使用:

var someObject:Sprite = findOrMake(Sprite); // Makes a new Sprite. 
someObject = findOrMake(Sprite);   // References the above Sprite. 
+0

尽管这让我头晕目眩,但我认为这正是我正在寻找的!谢谢! – theseal53 2014-10-08 18:08:19

+0

@ theseal53我很高兴它的帮助,虽然我很好奇你为什么要这样做。这听起来像你试图实施单身模式,但以一种奇怪的方式。 – Marty 2014-10-08 20:54:44

+0

只是抬头看单身模式...不,那不是我要去的地方。我有房间需要保留他们的属性后,他们已经进入,但在此之前,我认为实例化所有这些房间,并将其保存在内存中是没有必要的。我不知道这会如何显着提高性能(如果有的话),但我认为它仍然是一个有效的问题 – theseal53 2014-10-09 20:57:19

2

如果你知道什么类型的someObject应该是,它很容易:

var someObject:SomeClass; 

if(someObject==null) 
{ 
    someObject = new SomeClass(); // creates an instance of the class 
} 

如果你不这样做,你让辛苦自己。我想你必须重新考虑你的设计。

+0

让我们假设,从理论上说,改变自己的设计也将汽油淋我的头,扔匹配在我的头发。有没有办法做到这一点? – theseal53 2014-10-07 23:18:53

0

不要用实例化类的确切名称来命名实例。

如果你这样做:

var someobject; 

if (someobject == null) 
{ 
    someobject = new someObject() 
} 

它的工作原理。

+0

呃....也许我不清楚。 'someObject'是变量引用。我们不知道“someObject”的类,只要我们创建一个类,它的名字就不会有什么关系。 – theseal53 2014-10-07 23:21:29