2017-04-13 53 views
1

我遇到了一些我寫的代碼,這個問題完全讓我難住了。JSX webpack中同一類中的重複構造函數構建

主要JSX教程可在JSX Github Page有名爲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 { 
 
\t constructor() { 
 
\t \t this.data = []; 
 
\t \t this.settings = {}; 
 
\t } 
 

 
\t //Copy constructor 
 
\t constructor(other : MutableDataStore) { 
 
\t \t this.data = other.data.slice(); 
 
\t \t this.settings = Object.assign({}, this.settings); 
 
\t } 
 
    
 
    //...Other functions omitted 
 
}

我碰到下面的錯誤在我的WebPack編譯:

在錯誤./ src/stores/helper-classes/mutabledatastore.jsx 模塊構建失敗:SyntaxError:同一類中的重複構造函數(8:1)

我完全被這個難住了,因爲我在網上找不到類似的東西,除非它似乎是一個短暫的問題。

我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;

和我的巴貝爾預設是ES2015和反應。

任何幫助,將不勝感激!

+3

命名非常糟糕,但「JSX」教程頁面適用於某人稱爲JSX的語言,但它不是由React使用或由Babel處理的JSX。在正常的ES6中不允許使用多個'構造函數'函數,有或沒有Babel/React的JSX。 – loganfsmyth

+0

@loganfsmyth感謝您回答問題。我希望我能給你答案,因爲這似乎已經回答了我的問題。 – aphenine

回答

1

由於loganfsmyth在評論中說,可以有only be one constructor in an ES6 class。您可以通過,如果其他在結構或通過參數

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

+0

謝謝,這很有用。看看別人會怎麼做很有意思。是的,我的意思是複製其他設置,而不是這個......不會接受答案,因爲看起來我的問題是專門弄糊塗了另一個在Google上高度鏈接的JSX項目以及它給我的衝突信息。這似乎是合乎邏輯的,如果JSX是一種轉譯語言,那麼人們可能會添加類似的擴展。 – aphenine

+0

這些示例中的代碼本質上不是jsx。反應環境中的jsx是指在JavaScript代碼中使用HTML標籤,例如, 'render(){return

example
}'。這些類是符合ECMAScript 6(ES6)的JavaScript。 –

相關問題