我写的一些代码遇到了问题,这完全难倒了我。
JSX Github 页面上提供的主要 JSX 教程有一个名为 Point 的示例类,如下所示:
class Point {
var x = 0;
var y = 0;
function constructor() {
}
function constructor(x : number, y : number) {
this.set(x, y);
}
function constructor(other : Point) {
this.set(other);
}
function set(x : number, y : number) : void {
this.x = x;
this.y = y;
}
function set(other : Point) : void {
this.set(other.x, other.y);
}
}
该类有一个我从C++时代就熟悉的多个构造函数类型的明显示例。 它甚至有一个定义的复制构造函数,我认为这很棒。
但是,如果我得到并创建了一个类似的类供我使用:
export default class MutableDataStore {
constructor() {
this.data = [];
this.settings = {};
}
//Copy constructor
constructor(other : MutableDataStore) {
this.data = other.data.slice();
this.settings = Object.assign({}, this.settings);
}
//...Other functions omitted
}
我在 webpack 构建中收到以下错误:
./src/stores/helper-classes/mutabledatastore.jsx 中的错误模块生成失败:语法错误:同一类中的重复构造函数 (8:1(
我完全被这个难住了,因为我在网上找不到任何类似的东西,除非它似乎是一个暂时的问题。
My webpack.config.js 是:
var webpack = require("webpack");
var path = require("path");
var src = path.resolve(__dirname, "src");
var app = path.resolve(__dirname, "app");
var config = {
entry: src + "/index.jsx",
output: {
path: app,
filename: "javascript.js"
},
module: {
loaders: [{
include: src,
loader: "babel-loader"
}]
}
};
module.exports = config;
我的 Babel 预设是 ES2015 和 React。
任何帮助将不胜感激!
正如 loganfsmyth 在评论中所说,ES6 类中只能有一个构造函数。 您可以通过检查构造中是否设置了其他或为参数提供默认值来获得所需的效果
export default class MutableDataStore {
constructor(other : MutableDataStore) {
this.data = other ? other.data.slice() : [];
this.settings = other ? Object.assign({}, other.settings) : {};
}
//...Other functions omitted
}
// or
export default class MutableDataStore {
constructor(other : MutableDataStore = { data: [], settings: {} }) {
this.data = other.data.slice();
this.settings = Object.assign({}, other.settings);
}
//...Other functions omitted
}
作为一方,我认为您可能希望复制构造函数从other
复制设置,而不是this
。