gpt4 book ai didi

javascript - 如何从 Node.js 中的另一个文件正确创建原型(prototype)对象?

转载 作者:搜寻专家 更新时间:2023-11-01 00:33:44 25 4
gpt4 key购买 nike

我在 Node.js 中遇到了一个非常令人沮丧的问题。

我将从我正在做的事情开始。

我在一个文件中创建一个对象,然后导出构造函数并在其他文件中创建它。

我的对象是这样定义的:

文件 1:

var Parent = function() {};

Parent.prototype = {
C: function () { ... }
}

module.exports = Parent;

文件 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;

我正在尝试在另一个文件中使用该对象

文件 3:

var Obj = require('../obj.js'),
obj = new Obj();

obj.A();

我收到错误:

TypeError: Object [object Object] has no method 'A'

然而,当我运行 Object.getPrototypeOf(obj) 时,我得到:

{ A: [Function], B: [Function] }

我不知道我在这里做错了什么,我们将不胜感激。

最佳答案

我无法重现您的问题。这是我的设置:

parent.js

var Parent = function() {};

Parent.prototype = {
C: function() {
console.log('Parent#C');
}
};

module.exports = Parent;

child.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;

ma​​in.js

var Child = require('./child');
child = new Child();

child.A();
child.C();

并运行main.js:

$ node main.js
Child#A
Parent#C

源代码可通过 Git 在以下要点处克隆:https://gist.github.com/4704412


旁白:澄清 exportsmodule.exports 的讨论:

如果你想附加新属性到exports对象,你可以使用exports。如果您想将导出完全重新分配给一个新值,您可以考虑使用 module.exports。例如:

// correct
exports.myFunc = function() { ... };
// also correct
module.exports.myFunc = function() { ... };

// not correct
exports = function() { ... };
// correct
module.exports = function() { ... };

关于javascript - 如何从 Node.js 中的另一个文件正确创建原型(prototype)对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com