对象作为函数

时间:2016-01-25 00:07:48

标签: javascript node.js

我希望以下工作,因此getObject函数返回的对象将是最新的。我认为如果对象实际上是一个函数或者可能有其他方法可以做到这一点。

var o;
var module = {
  setObject: function(newObject) {
    o = newObject;
  },
  getObject: function() {
    if(o) {
      return o;
    }
    o = {"a": "123"}
    return o
  }
}
var objCopy = module.getObject();
console.log(objCopy.a)
module.setObject({"a":"321"})
console.log(objCopy.a)

如图所示,设置新对象显然不会更改objCopy,输出将为“123”,“123”。 有什么方法可以实现这一目标? 基本上,对象创建器模块是其他代码使用的Node.js模块。

4 个答案:

答案 0 :(得分:0)

制作模块或其他对象的属性。

var o = { obj: undefined };
var module = {  
    setObject: function(newObject) {
        o.obj = newObject;
    },
    getObject: function() {
        if(o) {
          return o;
        }
        o.obj = {"a": "123"}
        return o
    }
}
var objCopy = module.getObject();
console.log(objCopy.obj.a)
module.setObject({"a":"321"})
console.log(objCopy.obj.a)

答案 1 :(得分:0)

试试这个:

    var o;
    var module = {
      o:{"a":"123"},
      setObject: function(newObject) {
        this.o = newObject;
      },
      getObject: function() {
        return this.o;
      }
    }
    var objCopy = module;
    console.log(objCopy.getObject())
    module.setObject({"a":"321"})
    console.log(objCopy.getObject())

答案 2 :(得分:0)

嗯,我不明白为什么要创造这个,你能解释一下原因吗?这不符合OOP的概念

发生的事情是“return o”返回“o”的值,而你正在丢失引用。然后,setObject只是改变“o”的值,这是全局的

答案 3 :(得分:0)

这样的事情怎么样?

var module = {
  o: {},
  setObject: function(newObject) {
    this.o = newObject;
  },
  getObject: function(objName) {
    return this[objName];
  }
}
module.setObject({"a": "123"})
var objCopy = module;
module.setObject({"a":"321"});
console.log(objCopy.getObject("o"));
console.log(module.getObject("o"));

Codepen:https://codepen.io/anon/pen/OMQqLa