Ich erstelle dynamisch eine Funktion auf einer Foo1
Instanz namens test
. Ich erstelle diese Funktion mit eval
. Ich würde erwarten, dass diese Funktion Zugriff auf die Foo2
Klasse hätte, aber ich bekomme eine ReferenceError: Foo2 is not defined
.Javascript `eval()` Bereich in ES6
Ich habe ein Problem mit Babel
darüber eröffnet und here
gefunden werden kann, wenn man sich den Beispielcode ausführen möchten, laden Sie es von here und folgen Sie den Anweisungen in der README.MD
zu reproduzieren.
auszuführen:
npm install npm run start naviage to localhost:8080
Hier ist die Verzeichnisstruktur für mein Minimal, Complete, und prüfbare Beispiel in meiner Umgebung:
root
- src
- Foo1.js
- Foo2.js
- .babelrc
- app.js
- package.json
Foo1.js
import Foo2 from './Foo2.js';
export default class Foo1 {
constructor() {
// Isolate the impact of eval within makeFunction
let makeFunction = text => {
return eval("(function() { " + text + "})");
};
this.test = makeFunction('let foo2 = new Foo2(); foo2.test();');
}
}
foo2 .js
export default class Foo2 {
test() {
console.log('i\'m working!');
}
}
.babelrc
{
"presets": ["es2015"]
}
app.js
import express from 'express';
import http from 'http';
import Foo1 from './src/Foo1.js';
const app = express();
const server = http.createServer(app);
app.get('/', (req, res) => {
let test = new Foo1();
test.test();
res.end('bye');
});
server.listen(8080);
package.json
{
"name": "test",
"scripts": {
"start": "./node_modules/babel-cli/bin/babel-node.js ./app.js"
},
"dependencies": {
"http": "*",
"express": "*",
"babel-cli": "^6.7.7",
"babel-core": "^6.7.7",
"babel-polyfill": "^6.3.14",
"babel-preset-es2015": "^6.6.0"
}
}
Jetzt, Wenn ich die Foo2.js
Klasse auf die vorherige Version von JavaScript funktioniert alles ändern, wie ein Charme:
function Foo2() { }
Foo2.prototype.test = function() {
console.log('i\'m working!');
};
module.exports = Foo2;
Okay I Ich bearbeite die Frage gerade – frankgreco
Hervorragende Anstrengung auf dem MCVE, BTW. –