Cal*_*inR 2 javascript node.js
我在 Node.js 中遇到了一个非常令人沮丧的问题。
我将从我正在做的事情开始。
我在文件中创建一个对象,然后导出构造函数并在其他文件中创建它。
我的对象定义如下:
文件 1:
var Parent = function() {};
Parent.prototype = {
C: function () { ... }
}
module.exports = Parent;
Run Code Online (Sandbox Code Playgroud)
文件2:
var Parent = require('foo.js'),
util = require('util'),
Obj = function(){ this.bar = 'bar' };
util.inherits(Obj, Parent);
Obj.prototype.A = function(){ ... };
Obj.prototype.B = function(){ ... };
module.exports = Obj;
Run Code Online (Sandbox Code Playgroud)
我正在尝试在另一个文件中像这样使用该对象
文件 3:
var Obj = require('../obj.js'),
obj = new Obj();
obj.A();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
TypeError: Object [object Object] has no method 'A'
Run Code Online (Sandbox Code Playgroud)
但是当我运行 Object.getPrototypeOf(obj) 我得到:
{ A: [Function], B: [Function] }
Run Code Online (Sandbox Code Playgroud)
我不知道我在这里做错了什么,任何帮助将不胜感激。
我无法重现您的问题。这是我的设置:
父.js
var Parent = function() {};
Parent.prototype = {
C: function() {
console.log('Parent#C');
}
};
module.exports = Parent;
Run Code Online (Sandbox Code Playgroud)
孩子.js
var Parent = require('./parent'),
util = require('util');
var Child = function() {
this.child = 'child';
};
util.inherits(Child, Parent);
Child.prototype.A = function() {
console.log('Child#A');
};
module.exports = Child;
Run Code Online (Sandbox Code Playgroud)
主文件
var Child = require('./child');
child = new Child();
child.A();
child.C();
Run Code Online (Sandbox Code Playgroud)
并运行main.js:
var Parent = function() {};
Parent.prototype = {
C: function() {
console.log('Parent#C');
}
};
module.exports = Parent;
Run Code Online (Sandbox Code Playgroud)
源代码可通过 Git 在以下 Gist 克隆:https : //gist.github.com/4704412
旁白:澄清exportsvsmodule.exports讨论:
如果要将新属性附加到导出对象,可以使用exports. 如果您想将导出完全重新分配给新值,请使用module.exports. 例如:
// correct
exports.myFunc = function() { ... };
// also correct
module.exports.myFunc = function() { ... };
// not correct
exports = function() { ... };
// correct
module.exports = function() { ... };
Run Code Online (Sandbox Code Playgroud)