gpt4 book ai didi

node.js - 如何在 node.js 中跨多个文件拆分类定义?

转载 作者:搜寻专家 更新时间:2023-10-31 22:27:40 25 4
gpt4 key购买 nike

我对 Foo 的类定义已经发展到我想将它拆分到多个文件的程度。例如,我想要这样的东西:

// file foo.js
'use strict';
function Foo() { };
Foo.prototype.constructor = Foo;
Foo.prototype.methodA = function() { console.log('methodA'); };
module.exports = Foo;

// file foo-aux.js
'use strict';
Foo.prototype.methodB = function() {
console.log('methodB');
this.methodA();
};

// file main.js
'use strict';
const Foo = require('./foo');
var foo = new Foo();
foo.methodB();

module.exportrequire() 的正确组合是什么才能使上述代码正常工作?

最佳答案

更新的答案

(McMath's detailed answer 的完整支持——它比下面的原始答案更好地扩展,并提供了更好的代码重用的机会。它促使我更新这个答案。但是如果你不需要完整的 mixin那里支持的路线,这里有一个干净简单的方法。)

修改 technique suggested by Shaun Xu ,您可以将主要类定义作为参数传递给 require,它将在拆分文件中接收。

最好用 index.js 创建一个子目录来保存类定义和子文件——这清楚地表明子文件是 Foo 的一部分 类:

main.js
foo/
index.js
foo-a.js
foo-b.js

具有以下内容:

// foo/index.js
'use strict';
function Foo() {};
Foo.prototype.constructor = Foo;
require('./foo-a')(Foo);
require('./foo-b')(Foo);
module.exports = Foo;

// foo/foo-a.js
'use strict';
module.exports = function(Foo) {
Foo.prototype.methodA = function() {
console.log('methodA');
};
// more methods as desired...
};

// foo/foo-b.js
'use strict';
module.exports = function(Foo) {
Foo.prototype.methodB = function() {
console.log('methodB');
this.methodA();
};
// more methods as desired...
};

并调用它:

// main.js
'use strict';
const Foo = require('./foo/');
var foo = new Foo();
foo.methodB();

原始答案

// file foo.js
'use strict';
function Foo() { };
Foo.prototype.constructor = Foo;
Foo.prototype.methodA = function() { console.log('methodA'); };
require('./foo-aux')(Foo); // <== add this line
module.exports = Foo;

// file foo-aux.js
'use strict';
module.exports = function(Foo) { // <== wrap function definitions
Foo.prototype.methodB = function() {
console.log('methodB');
this.methodA();
};
};

// file main.js
'use strict';
const Foo = require('./foo');
var foo = new Foo();
foo.methodB();

// test
$ node foo.js
methodB
methodA

关于node.js - 如何在 node.js 中跨多个文件拆分类定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38124639/

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