我正在将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'中返回一个匿名函数来实现这一点,但是我再也不能定义继承依赖了。
我意识到模块背后的想法是防止污染全局名称空间-请记住,上面发布的代码仅在我的库中使用,该库在实际应用中使用之前包装在单个模块中。
因此,要实例化继承的函数/类,我必须键入Library.Inherited.Inherited,但我希望使用Library.Inherited。
还有另一种方法吗?
最佳答案
只需返回Inherited构造函数:
define(function () {
function Inherited() {
}
Inherited.prototype = {
};
return Inherited;
});
模块导出值可以是可返回类型。