我正在将 C++ 项目移植到 Javascript。我想保持面向对象的设计,所以我决定使用 requireJS 将移植的类组织为模块。我模拟这样的继承:
define(
[
],
function()
{
'use strict';
function Base( arguments )
{
}
function Inherited( arguments )
{
Base.call( this, arguments );
}
Inherited.prototype = Object.create( Base.prototype );
return {
Inherited : Inherited
};
});
假设我将此模块保存到文件“inherited.js”并在另一个模块中要求它:
define(
[
'inherited'
],
function( Inherited )
{
'use strict';
function Whatever( arguments )
{
var inherited = new Inherited.Inherited( arguments );
}
return {
Whatever : Whatever,
};
});
现在困扰我的是,我必须在创建对象时两次声明类名,一次是模块名,一次是函数/类的名称。
相反,我希望能够调用:
var inherited = new Inherited( arguments );
我可以通过在“inherited.js”中返回一个匿名函数来实现这一点,但是我不能再定义继承依赖项了。
我意识到模块背后的想法是防止污染全局命名空间 - 请记住,上面发布的代码仅在我的库中使用,该库在用于实际应用程序之前包装在单个模块中。
所以要实例化函数/类Inheritated我必须输入Library.Inherited.Inherited但我更喜欢Library.Inherited。
还有另一种方法可以做到这一点吗?