第一个文件utils.js
具有模仿shell
的功能,以便用户可以输入javascript代码:
const readline = require('readline-sync');
var x = {
shell: function(){
while(1) {
let code = readline.question(">> ");
try {
console.log(eval(code));
} catch (e) {
console.log(e.message);
}
}
}
}
module.exports = x;
第二个文件main.js
使用上面的shell
函数:
const utils = require('./utils.js');
var country = "india";
var names = ["x", "y", "z"]
function foo(){...}
function bar(){...}
utils.shell();
我一直试图将Second文件的上下文传递给shell
函数,以便能够从外壳程序中访问Second文件中的函数和变量。但是到目前为止我还没有成功。
我对call
和其他一些方法感到有些困惑,但它们都失败了。任何帮助都将受到高度赞赏。
注意:
utils.shell.call(this)
正在将一个空对象{}
传递给shell
函数
答案 0 :(得分:2)
在上面的main.js中,您已经使用var声明了变量。因此,不会在 this 上下文中进行设置。所以我以这样的方式重写了代码,
main.js
const utils = require('./utils.js');
country = "india";
names = ["x", "y", "z"];
foo = function (){
}
bar = function (){
}
utils.shell.call(this);
和utils.js
const readline = require('readline-sync');
var x = {
shell: () => {
while(1) {
let code = readline.question(">> ");
try {
console.log(eval(code));
} catch (e) {
console.log(e.message);
}
}
}
}
module.exports = x;
现在在utils中,您将不会得到空对象,而是会得到所有四个成员(foo,bar,country,names)。
答案 1 :(得分:1)
您可以将所有内容放入对象中,将其作为参数传递给utils.shell
,并让utils.shell
在global
上公开吗?
const context = {
country: 'india',
names: ['x', 'y', 'z'],
foo: () => console.log('foo')
}
utils.shell(context);
shell: function(context){
Object.assign(global, context);
while(1) {
let code = readline.question(">> ");
try {
console.log(eval(code));
} catch (e) {
console.log(e.message);
}
}
}