对象在 babel 转换后不支持此操作 new x()
object doesn't support this action new x() after babel transform
我目前正在将一堆 JavaScript 模块转换为 ECMAScript 6 classes。我们正在为 AMD 加载程序使用 require.js 并手动编写 define([], ...) 逻辑。
我们正在使用 Babel 将 ES 6 classes 转译回 ES 5 定义的模块。我的 bablerc 文件如下所示:
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-amd"]
}
一个简单的class看起来像这样
import x from "dev/x"
import ko from "knockout"
import z from "dev/z"
export class y extends x {
...
}
输出看起来基本正确:
define(["exports","dev/x", "knockout", "dev/z"], function(x, knockout, z){
Object.defineProperty(exports,"__esModule",{value: true});
// Bunch of generated crap
var y = exports.y = function(_x)...(_x2.default);
}
所以当我尝试这样做时:
var foo = new y();
我收到 "Object doesn't support this action" JavaScript 异常。
我试图将生成的代码(我不想这样做)更改为:
var y = exports = function(_x)...(_x2.default);
但这并没有起到任何作用。但是,当我将该行更改为:
return function(_x)...(_x2.default);
或添加此行:
var y = exports = function(_x)...(_x2.default);
return y;
一切正常。我不想每次我们进行更改时都必须修改生成的文件,我只希望 babel 做它的事情并且是正确的!我在这里错过了什么?
更新:我正在使用 Druandal 库 (durandaljs.com) 的 system.js 部分,它通过传递一个名为 aquire 模块 ID 的函数来包装对 require 的调用,并加载它。所以我这样打电话:
system.acquire(moduleNameAndPath).then(function acquiredModuleFunc(acquiredModule) {
if (acquiredModule !== null || acquiredModule !== undefined){
var item = new acquiredModule(); // Object doesn't support here...
}
}
我们在构建视图绑定的视图模型时使用它来引入伪多态行为。
您正在导出名为 y
的构造函数。在您的导入 (acquire
) 中,您似乎尝试在模块对象本身上使用 new
。相反,尝试
system.acquire(moduleNameAndPath).then(function(acquiredModule) {
var Y = acquiredModule.y;
var item = new Y();
});
我目前正在将一堆 JavaScript 模块转换为 ECMAScript 6 classes。我们正在为 AMD 加载程序使用 require.js 并手动编写 define([], ...) 逻辑。
我们正在使用 Babel 将 ES 6 classes 转译回 ES 5 定义的模块。我的 bablerc 文件如下所示:
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-amd"]
}
一个简单的class看起来像这样
import x from "dev/x"
import ko from "knockout"
import z from "dev/z"
export class y extends x {
...
}
输出看起来基本正确:
define(["exports","dev/x", "knockout", "dev/z"], function(x, knockout, z){
Object.defineProperty(exports,"__esModule",{value: true});
// Bunch of generated crap
var y = exports.y = function(_x)...(_x2.default);
}
所以当我尝试这样做时:
var foo = new y();
我收到 "Object doesn't support this action" JavaScript 异常。
我试图将生成的代码(我不想这样做)更改为:
var y = exports = function(_x)...(_x2.default);
但这并没有起到任何作用。但是,当我将该行更改为:
return function(_x)...(_x2.default);
或添加此行:
var y = exports = function(_x)...(_x2.default);
return y;
一切正常。我不想每次我们进行更改时都必须修改生成的文件,我只希望 babel 做它的事情并且是正确的!我在这里错过了什么?
更新:我正在使用 Druandal 库 (durandaljs.com) 的 system.js 部分,它通过传递一个名为 aquire 模块 ID 的函数来包装对 require 的调用,并加载它。所以我这样打电话:
system.acquire(moduleNameAndPath).then(function acquiredModuleFunc(acquiredModule) {
if (acquiredModule !== null || acquiredModule !== undefined){
var item = new acquiredModule(); // Object doesn't support here...
}
}
我们在构建视图绑定的视图模型时使用它来引入伪多态行为。
您正在导出名为 y
的构造函数。在您的导入 (acquire
) 中,您似乎尝试在模块对象本身上使用 new
。相反,尝试
system.acquire(moduleNameAndPath).then(function(acquiredModule) {
var Y = acquiredModule.y;
var item = new Y();
});