尝试制作数据模块

时间:2019-05-14 11:00:38

标签: javascript

我正在尝试使用JavaScript制作数据模块,但无法从外部访问数据,而当我尝试从内部记录数据时,一切工作正常

'use strict;'

function manager() {
  let data = {};

  function define(name, surname, age) {
    let length = Object.keys(data).length;
    data[`user${length + 1}`] = {
      name: name,
      surname: surname,
      age: age
    };
  }

  function get(num) {
    return data[`user${num}`];
  }

  return {
    define: define,
    get: get
  };
};


manager().define('John', 'Smith', 17);
console.log(manager().get(1));


//undefined

2 个答案:

答案 0 :(得分:3)

每次调用manager时,都会定义一个名为data的新变量,并为其分配值{}

因此manager().define('John', 'Smith', 17);创建一个对象,为其分配一些数据,然后该对象超出范围并被垃圾回收。

然后console.log(manager().get(1));创建一个新对象,其中没有数据。

定义变量并将对象分配给函数 函数。

答案 1 :(得分:1)

请使用模块模式,执行过程将像这样

var manager = (function() {
    'use strict';
    let data = {};

    function define(name, surname, age) {
        let length = Object.keys(data).length;
        data[`user${length + 1}`] = {
            name: name,
            surname: surname,
            age: age
        };
    }

    function get(num) {
        return data[`user${num}`];
    }
    return {
        define: define,
        get: get
    };
}());

manager.define('John', 'Smith', 17)
console.log(manager.get(1))

var manager = (function() {
    'use strict';
    let data = {};

    function define(name, surname, age) {
        let length = Object.keys(data).length;
        data[`user${length + 1}`] = {
            name: name,
            surname: surname,
            age: age
        };
    }

    function get(num) {
        return data[`user${num}`];
    }
    return {
        define: define,
        get: get
    };
}());

manager.define('John', 'Smith', 17)
console.log(manager.get(1))