繁体   English   中英

Node.js:如何像在 Python 中一样导入/请求文件、运行其命令并访问其更新的变量?

[英]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.var3this.callFunction()等,就像在 Python 中使用self一样。

从导入的(默认)类中,您使用new关键字创建一个实例,然后使用您的实例名称newThing.var3newThing.callFunction()等使用变量和函数方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM