2017-03-21 21 views
1

はい、これまでに死ぬように求められましたが、noneoftheseが私のために働いています。「コンストラクタではありませんが、タイプチェックアウト」

Configコンストラクタを呼び出すときにTypeError: Config is not a constructorが表示されます。他のSOの質問とMDNを見て、このエラーの通常の原因は、コンストラクタをシャドウするか、呼び出し不可能な型を呼び出すことですが、私のプロジェクトでこれらのチェックアウトもありません。

これは呼び出しです:それはそれはFunctionだことが明らかになったので、それが定義されているほぼ確実に同じ機能です呼び出す前に

Configの種類のログ
var fs = require("fs"); 

exports.Config = file => { 
    var json; 

    if (fs.existsSync(file) && !fs.lstatSync(file).isDirectory()) { 
    json = JSON.parse(fs.readFileSync(file)); 
    } 
    else { 
    throw new ReferenceError("File doesn't exist: can't load config"); 
    } 

    this.has = key => { 
    return json.hasOwnProperty(key); 
    }; 

    this.get = key => { 
    return json[key] || null; 
    }; 

    this.set = (key, value, write) => { 
    json[key] = value; 
    if (write) { 
     fs.writeFileSync(file, JSON.stringify(json)); 
    } 
    }; 
}; 

./config.js

var Server = require("./server.js").Server; 
var Config = require("./config.js").Config; 

new Server(new Config("app/config.json")).run(); 

config.js。だから、Nodeはそれがコンストラクタではないと私に伝えているのはなぜですか?

+0

[すべての関数がコンストラクタわけではありませんが...](http://stackoverflow.com/q/34361379/1048572) – Bergi

答えて

4

なぜ、Nodeはそれがコンストラクタではないことを伝えていますか?

これはコンストラクタではないためです。 :-)矢印関数は決してコンストラクタではなく、thisを閉じてprototypeプロパティを持たないので、コンストラクタとして使用することはできません(newで呼び出されたときに特定のthisを設定する必要があり、prototypeプロパティが必要ですしたがって、newで作成されたオブジェクトの[[Prototype]]を設定することができます。

いずれか1. functionファンクションにするか、またはclassにします。

ここで#1のための1つのラインの変更です:

exports.Config = function(file) { 
+1

*ため息*。私はそれを試みたと確信していますが、ちょっと – ArtOfCode

関連する問題