我是Javascript的新手,我有Java背景。我正在尝试以不同的方式创建/导出/使用函数(以简单的方式调用它并使用new运算符)。我正在探索并尝试不同的方式,但是,当我编写以下代码时,我期待不同的结果(可能是)。但我发现没有区别。
使用新关键字
var Repo = function() {
this.repository = function(type) {
if(type === 'task') {
if(this.Task) {
console.log("Rturned saved cache task");
return this.Task;
}
this.Task = require("./taskrepository")('jdbc');
return this.Task;
}else if(type === 'user') {
this.user = require("./user");
return this.user;
}
}
module.exports = new Repo()
我希望第二次调用时可以从缓存中返回对象Task,这很好。
仅使用函数调用
var Repo = function() {
return {
repository : function(type) {
if(type === 'task') {
if(this.Task) {
console.log("Rturned saved cache task");
return this.Task;
}else {
this.Task = require("./taskrepository")('jdbc');
return this.Task;
}
}else if(type === 'user') {
this.user = require("./user");
this.user;
}
}
}
}
module.exports = Repo()
这会产生相同的结果。
我假设使用new关键字创建一个存储所有变量的实例,所以当第二次调用时,它将从缓存中检索,当我调用function()时,它将每次都是Task的新实例。
使用new?
调用此关键字时的工作方式是否相同?Main.js
'use strict';
var Task = require("./task");
var Repository = require("./repositorypattern");
var task1 = new Task(Repository.repository('task').get(1));
task1.completed();
task1.saved();
var task2 = new Task(Repository.repository('task').get(2));
task2.completed();
task2.saved();
var task3 = new Task(Repository.repository('task').get(3));
task3.completed();
task3.saved();
我很难在javascript中围绕函数。