在ES6中导入/导出原型

时间:2018-04-20 15:30:12

标签: javascript webpack phaser-framework es6-modules

背景:
我目前正在使用Phaser框架进行游戏。我有一个代码库可以使用,因此无法更改。 Phaser没有本地的导入/导出方式,因此我使用webpack和babel来解决with lots of help from this template.

我的问题源于尝试导入和导出以下代码:

给定代码:

AchievementManager = function(a) { 
    this.game = a, 
    this._playerDataModified = !1, 
    this.newLevels = [], 
};


AchievementManager.prototype = { 
    _getTotalLoyaltyPoints: function() { 
        return 1;
    }
}

我尝试出口。返回编译错误(不在浏览器中)'模块构建失败:SyntaxError:意外的令牌,期望{'参考AchievementManager:

export AchievementManager = function(a) { 
    this.game = a, 
    this._playerDataModified = !1, 
    this.newLevels = [], 
};


export AchievementManager.prototype = { 
    _getTotalLoyaltyPoints: function() { 
        return 1;
    }
}

如果有人能帮我找到如何导出/导入以这种形式编写的类,同时保持原型函数等核心概念,那就太棒了!

2 个答案:

答案 0 :(得分:0)

导出构造函数就足够了。原型是它的一个属性,你可以像这样访问它(如果你需要它 - 与导入的构造函数交互的常用方法是new它们)。您不必在属性赋值上放置某种“可见性注释”。您当前的代码不起作用,因为只能在ES6中导出变量绑定。

你应该写

export function AchievementManager(a) { 
    this.game = a;
    this._playerDataModified = false;
    this.newLevels = [];
}

AchievementManager.prototype._getTotalLoyaltyPoints = function() { 
    return 1;
};

答案 1 :(得分:0)

您已导出AchievementManager。导出AchievementManager.prototype没有任何合理的理由。导入时,只需在AchievementManager上使用.prototype即可。

无论如何,如果你想:

AchievementManager.prototype = { 
    _getTotalLoyaltyPoints: function() { 
        return 1;
    }
}
export const AchievementManagerPrototype = AchievementManager.prototype;