问题描述
我对使用ES6中的类进行编码有些困惑。假设我想创建一个类似于JS的简单库。我在library.js中创建了一个类似的模块:
const $ = (...args) => {
if (typeof args[0] === 'function') {
const docReadyFn = args[0];
document.addEventListener('DOMContentLoaded',docReadyFn);
}
}
module.exports = $;
然后我在index.js中需要此文件:
const $ = require('./library');
module.exports = $;
const $ = require('./library');
$(() => {
console.log('DOM ready!');
});
但是,我不想做const $ = (...args) => { ... }
,而是想用这样的构造函数制作一个类:
class Library {
constructor(...args) {
if (typeof args[0] === 'function') {
const docReadyFn = args[0];
document.addEventListener('DOMContentLoaded',docReadyFn);
}
}
}
module.exports = Library;
以这种方式这样做明智吗?对于类,我必须使用new Library(args)
创建一个新实例,但是通过导出const $ = (...args) => { ... }
,我可以简单地使用$
而无需执行任何操作。没有新实例或其他任何东西。我该如何使用类来实现与创建const并导出并立即使用它相同的目的?
解决方法
必须始终用class
调用new
,并将创建一个新实例。
您的$
函数不会创建对象-它不应该是class
。