Объект должен сохранять свой статус

1

Я пытаюсь выяснить, как поместить объект в функцию и вернуть этот объект с его исходными значениями.

Это часть моей "рамки"...

Здесь упрощенный пример:

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".

Как я могу сделать это правильно?

Теги:
object
ecmascript-5

1 ответ

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"});

Или со стандартными объектными функциями:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню