对象应该保持其状态

时间:2017-06-09 12:13:35

标签: javascript object ecmascript-5

我试图找出如何将一个对象放到一个函数并返回它 具有原始值的对象。

它来自我的"框架" ...

这是一个简化的例子:

var _objectToFunction = function (obj) {
        var F = function () { }
        F.prototype = obj
        return F
    }

var myclass = {
    a:"abc",
    print: function(){
      console.log("i am a func")
    },
    config: {
      path: "c:/bla"
   }
}

var fo = _objectToFunction(myclass)
var of = new fo()
of.config.path = "c:/ofpath"
of.z = "zzz"
of.a ="aaa"
console.log(of)

var fo2 = _objectToFunction(myclass)
var of2 = new fo2()
console.log(of2.z)
console.log(of2.a)
console.log(of2.config.path)

console.log(of2.config.path)的输出应该是" c:/ bla",但是" c:/ ofpath"。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可能想要添加构造函数(在创建实例时调用的函数):

var _objectToFunction = function (obj) {
    var F = function (...values) {
      if( this.constructor) this.constructor(...values);
    }
    F.prototype = obj
    return F
}

因此,您可以为每个实例创建一个新的配置对象:

var myclass = {
constructor:function(addconf){
  this.config=Object.create(this.config);
  if(addconf) Object.assign(this.config,addconf);
},
a:"abc",
print: function(){
  console.log("i am a func")
},
config: {
  path: "c:/bla"
}
}

现在它表现得很好。

var parent=_objectToFunction(myclass);
var instance=new parent({ path:"changed"});

或者使用标准对象funcs:

var instance=Object.create(myclass);
instance.constructor({path:"changed"});