调用函数是否需要相同的资源和时间,就像在javascript node v8.5.0中创建构造函数的实例一样?
我发现他们给了我相同的结果,如:
var repo = function () {
var db = {};
var get = function (id) {
console.log('Getting task ' + id);
return {
name: 'new task from db'
}
}
var save = function (task) {
console.log('Saving ' + task.name + ' to the db');
}
console.log('newing up task repo');
return {
get: get,
save: save
}
}
module.exports = repo();
当我用module.exports = repo();
替换module.exports = new repo;
时,它会给我相同的结果,但我需要知道哪一个更好的表现。
答案 0 :(得分:0)
使用module.exports = repo();
调用repo函数并将返回值分配到module.export
,this
中的{@}}将指向同一个内存实例
因此首先使用module.exports = new repo;
创建新实例并将新实例分配给此方法中的module.export
this
将是不同的内存实例。
所以简单的术语全部取决于用例如何通过指向同一个实例或创建新实例来使用您的代码。
我希望你了解这个架构。
答案 1 :(得分:0)
由于你的函数确实已经返回一个对象,它不是一个构造函数(通过ids
关键字初始化一个实例),传统意义上不应该用this
<调用 / em>的。它是否更快或更慢并不重要 - 只是不要这样做。 (提示:new
可能会慢一些,因为它必须从new
创建一个新实例然后扔掉它。)
当然,在这种情况下根本没有充分理由使用功能。你无论如何只调用它一次,所以你可以内联代码:
repo.prototype
甚至简化为
const db = {};
function get(id) {
console.log('Getting task ' + id);
return {
name: 'new task from db'
}
}
function save(task) {
console.log('Saving ' + task.name + ' to the db');
}
console.log('newing up task repo');
module.exports = {
get,
save
};