【问题标题】:Importing/Exporting prototypes in ES6在 ES6 中导入/导出原型
【发布时间】:2018-10-01 09:01:39
【问题描述】:

上下文:
我目前正在使用 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: Unexpected token, expected {' in reference to AchievementManager:

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


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

如果有人可以帮助我了解如何导出/导入以这种形式编写的类,同时保持原型功能等核心概念,那就太好了!

【问题讨论】:

    标签: javascript webpack phaser-framework es6-modules


    【解决方案1】:

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

    你应该写

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

    【讨论】:

    • 非常感谢!正如您所说,通过 new 和属性表示法工作。
    【解决方案2】:

    您已经导出AchievementManager。没有任何充分的理由导出AchievementManager.prototype。导入时只需在AchievementManager 上使用.prototype

    无论如何,如果你想:

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

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2018-01-15
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多