[英]Node.js: How to import/require a file, run its commands and access its updated variables like in Python?
在 python 中,你可以只使用 file1.py 和一个名为“class1”的类,如下所示:
class class1:
def __init_(self, var1, var2):
self.var3 = var1
self.var4 = var2
self.callFunction(self.var3, self.var4)
def callFunction(self, classVar1, classVar2):
print(classVar1)
print(classVar2)
def anotherFunction(self, otherVar1, otherVar2):
daString = otherVar1 + otherVar2
return daString
if __name__ == '__main__':
class1('passing var1', 'passing var2')
我们可以在 file2.py 中导入它:
from folder import file1
from folder.file1 import *
然后我们可以调用 file2.py 中的 file1.py 类并访问其中的所有内容,包括更新后的 self 变量,如下所示:
newThing = file1.class1('updated self var1', 'updated self var2')
# lets print our updated self vars from file1.py class
print(newThing.var3) # "updated self var1"
print(newThing.var4) # "updated self var2"
# lets call a function from file1.py's class and print result
result = newThing.anotherFunction('test', '123')
print(result) # test123
很简单。 现在我的问题是:如何在 node.js 中完成这件事? 我的第一次失败尝试是这样的:
文件1.js:
class Class1 {
constructor(var1, var2) {
this.cVar1 = var1;
this.cVar2 = var2;
this.extraThing = 'extra text';
someFunction(this.cVar1, this.cVar2); // wont work, it doesnt recognize someFunction()
}
someFunction(passArg1, passArg2) {
console.log(passArg1 + passArg2 + this.extraThing); // this.extraThing seems to be undefined, same with just extraThing
}
}
module.exports = new Class1();
在 File2.js 中加载 File1.js:
const importClass = require('File1.js');
module.exports = async function(var1, var2) {
let classThing = new importClass(var1, var2); // will load, but unable to call a fnction inside of it
let var3 = 'something';
let var4 = 'else';
classThing.someFunction(var3, var4); // wont work, cant access someFunction (its undefined)
}
而我第二次失败的尝试是放弃 Class 的想法,只做exports.Class1 = function ();
在 File1.js 中,这对于我正在尝试做的事情可能会更糟。
我是 node.js 的新手,所以很有可能我正在做一些完全愚蠢的事情,我知道这一点.. 但我已经在互联网上搜索了很长时间,但我似乎无法找到我正在寻找的东西。 我正在寻找的东西(相当于它在 python 中的完成方式)甚至可能在 node.js 中吗?
要重写你提供给 NodeJS 的 python 代码——我会这样做:
folder/file1.js
class Class1 {
constructor(arg1, arg2) {
this.var3 = arg1;
this.var4 = arg2;
this.callFunction()
}
callFunction() {
console.log(this.var3)
console.log(this.var4)
}
anotherFunction(otherArg1, otherArg2) {
const daString = otherArg1 + otherArg2;
return daString
}
}
if (require.main === module)
new Class1("passing var1", "passing var2")
module.exports = Class1;
file2.js
const file1_Class1 = require("./folder/file1.js");
const newThing = new file1_Class1("updated self var1", "updated self var2")
console.log(newThing.var3);
console.log(newThing.var4);
const result = newThing.anotherFunction("test", "123");
console.log(result);
这将给出与 Python 中完全相同的日志结果:
1-执行: $ node file2.js
updated self var1 updated self var2 updated self var1 updated self var2 test123
2- 直接执行: $ node folder/file1.js
(as "main" )
updated self var1 updated self var2
类属性的更新值通过使用this
在类本身中使用。 即: this.var3
、 this.callFunction()
等,就像在 Python 中使用self
一样。
从导入的(默认)类中,您使用new
关键字创建一个实例,然后使用您的实例名称newThing.var3
、 newThing.callFunction()
等使用变量和函数方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.