通过为其定义提供句柄来创建新对象

时间:2015-05-06 01:29:48

标签: javascript design-patterns

this Udacity video on game development中,教师提到Javascript允许我们通过给出其定义的句柄来创建对象。然后,它说允许这个#34;重载的对象定义将使用指向其类定义的指针更新散列表"。

我完全知道哈希表,指针,重载方法和工厂模式是什么,但我无法理解这个神秘的陈述,或其他解释。

2 个答案:

答案 0 :(得分:4)

"哈希表"只是一种说法"普通Javascript对象"的一种更好的方式。教师的意思是"处理其定义"只是另一种说法"作为类的构造函数的函数"。

最终,他提到的陈述意味着什么:

  

每个重载的实体定义都将使用指向其类定义的指针

更新哈希表

如下:

  • 所有"子类" Entity将使用type值的密钥在单个共享hashmap /对象中注册其构造函数。
  • 这允许您通过访问new来获取构造函数(换句话说,调用gGameEngine.factory[type]的函数,它将为任何类型返回该实体的实例)。

这很好,因为每当程序员添加新类型的实体时,只要他们记得用正确的键向该gGameEngine.factory对象添加新条目,那么该对象将包含您需要的所有内容。构造任何类型的受支持对象。

因此,迭代级别编辑器生成的JSON结构的代码可以使用类似的方式创建任何类型的实例:

var typeConstructor = gGameEngine.factory(tileSpec.type),
    instance;

if (typeConstructor) {
    instance = new(typeConstructor)(tileSpec /* or whatever params */);
}

这类似于您链接到的视频的1分钟左右可见的代码。

现在有意义吗?

答案 1 :(得分:1)

我认为他所说的只是你可以将对函数/对象/变量的引用映射到另一个对象中。他正在使用一种property accessor syntax,但我认为他使用'handle'和'hash table'这样的语言使事情过于复杂。

var someClass = function () {
  // stuff
}

var containingObject = {};
containingObject["someClass"] = someClass;
// same thing as
containingObject.someClass = someClass;

然后,您可以通过调用containingObject属性来实例化该类。

var classInstance = new containingObject["someClass"]()
// or
var classInstance = new containingObject.someClass()