我试图找出如何将一个对象放到一个函数并返回它 具有原始值的对象。
它来自我的"框架" ...
这是一个简化的例子:
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"。
我该怎么做?
答案 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"});