Я пытаюсь выяснить, как поместить объект в функцию и вернуть этот объект с его исходными значениями.
Это часть моей "рамки"...
Здесь упрощенный пример:
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".
Как я могу сделать это правильно?
Вы можете добавить конструктор (вызываемую функцию, когда экземпляр был создан):
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"});