Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript和NodeJS:从不同的JS文件调用方法_Javascript_Node.js_Oop_Methods - Fatal编程技术网

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

JavaScript和NodeJS:从不同的JS文件调用方法,javascript,node.js,oop,methods,Javascript,Node.js,Oop,Methods,我使用NodeJS将一个js文件包含到另一个js文件中。下面我展示了我的两个文件。这两个类都包含两个对象的构造函数。我想从ClassA调用ClassB中的一个方法。在ClassA中,我需要ClassB(如下所示),我试图创建一个新的B类实例,并调用它类B的方法get。我得到以下错误: cB.get(); ^ TypeError: Cannot call method 'get' of undefined at Object.<anonymous> (/home/---/

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

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

function ClassB() 
{

    var myVar = 'test';

    function _get ()
    {
        return myVar;
    };

    this.get = function ()
    {
        return _get();
    };
 }

 exports.ClassB = ClassB;

我相信问题在于如何实例化类B的对象。有没有办法解决这个问题?

在创建实例时,您忘记了
new
关键字。

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

function ClassB() 
{

    var myVar = 'test';

    function _get ()
    {
        return myVar;
    };

    this.get = function ()
    {
        return _get();
    };
 }

 exports.ClassB = new ClassB();
这是我的答案

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;
CMD

$ node ClassA.js 
Test
ClassBV2

function ClassB(){
  this.myvar = "Test";
};
如果需要,请保持隐私

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'
console.log(cB.\u get());
^
TypeError:对象#没有方法“_get”

如果我这样做,那么如何从类A调用构造函数?好的,我可以这样做:var cB=imported.ClassB;而且看起来很好一旦你实例化了新的ClassB(),你应该能够利用导出的ClassB。我需要_get函数是私有的,get是私有的,所以在这种情况下我不能使用prototype OK updated以满足你的需要仅供参考。我继续使用你想要的任何方式。这种方式更干净。公认的答案
console.log(cB._get());
           ^
TypeError: Object #<ClassB> has no method '_get'