1

我正在将 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

还有另一种方法可以做到这一点吗?

4

1 回答 1

0

只需返回 Inherited 构造函数:

define(function () {
  function Inherited() {
  }

  Inherited.prototype = {
  };

  return Inherited;
});

模块导出值可以是可返回类型。

于 2012-09-06T21:44:58.283 回答