JavaScript和NodeJS:从不同的JS文件调用方法

JavaScript and NodeJS: Calling method from different JS file

本文关键字:JS 文件 调用 方法 NodeJS JavaScript      更新时间:2023-09-26

我使用NodeJS将一个js文件包含到另一个。下面我展示了我的两个文件。两个类都包含两个对象的构造函数。我想从类a中调用类b中的方法。在类a中,我需要类B(如下所示),我试图创建类B的新实例,并调用类B的方法get。我得到以下错误:

cB.get();
   ^
TypeError: Cannot call method 'get' of undefined
    at Object.<anonymous> (/home/---/ClassA.js:12:4)
//ClassA.js

var imported = require('./ClassB');
function ClassA() 
{
    //....
}
var cA = new ClassA();
var cB = imported.ClassB();
cB.get();
//ClassB.js

function ClassB() 
{
    var myVar = 'test';
    function _get ()
    {
        return myVar;
    };
    this.get = function ()
    {
        return _get();
    };
 }
 exports.ClassB = ClassB;

我认为问题在于我如何实例化类b的对象。有办法解决这个问题吗?

我的回答

ClassA

var ClassB = require('./ClassB');
var cB = new ClassB("Test");
console.log(cB.get());

ClassB:

function ClassB(myVar){
  this.myvar = myVar;
};
ClassB.prototype.get = function(){
  return this.myvar;
};
module.exports = ClassB;

$ node ClassA.js 
Test

ClassBV2

function ClassB(){
  this.myvar = "Test";
};

如果您需要_get为私有

function ClassB(){
  this.myvar = "Test";
};
ClassB.prototype.get = function(){
  return _get();
};
_get = function(){
  return "Other";
}
module.exports = ClassB;

如果你想使用它....

console.log(cB._get());
           ^
TypeError: Object #<ClassB> has no method '_get'

创建实例时忘记了new关键字

你需要实例化一个构造函数

function ClassB() 
{
    var myVar = 'test';
    function _get ()
    {
        return myVar;
    };
    this.get = function ()
    {
        return _get();
    };
 }
 exports.ClassB = new ClassB();