通过为其定义提供句柄来创建新对象
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()
在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
属性.
var classInstance = new containingObject["someClass"]()
// or
var classInstance = new containingObject.someClass()