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

Creating a new object by giving a handle to its definition

this Udacity video on game development 中,讲师提到Javascript 允许我们通过为其定义提供句柄来创建对象。然后,它说允许这个"an overloaded object definition will update a hash table with a pointer to its class definition"。

我很清楚散列table、指针、重载方法和工厂模式是什么,但我无法理解这个神秘的陈述或其他解释。

"Hash table" 只是 "ordinary Javascript object" 的一种更奇特的说法。讲师所说的"handle to its definition"只是另一种说法"the function that acts as a constructor for the class".

最终,他所说的你所说的是什么意思:

each overloaded entity definition will update a hash table with a pointer to its class definition

如下:

  • 实体的所有 "subclasses" 将使用作为 type 值的键在单个共享 hashmap/object 中注册它们的构造函数。
  • 这允许您通过访问 [=13] 获取任何类型的构造函数(换句话说,调用 new 的函数,它将 return 该实体的一个实例) =].

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

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

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

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

这类似于您链接到的视频的 1 分钟标记附近可见的代码。

现在明白了吗?

我认为他所说的只是您可以将引用映射到另一个对象内的函数/对象/变量。他使用了一种类型的 property accessor syntax,但我认为他使用 'handle' 和 'hash table'.

这样的语言使事情过于复杂化
var someClass = function () {
  // stuff
}

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

然后你可以通过调用 containingObject 属性.

实例化 class
var classInstance = new containingObject["someClass"]()
// or
var classInstance = new containingObject.someClass()