在函数调用中如何解释此关键字与使用new调用此关键字之间是否存在差异?

时间:2017-08-21 03:19:28

标签: javascript

我是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中围绕函数。

0 个答案:

没有答案