是否有任何动态方式来转换/克隆此对象:
var object = {
a: 2,
b: function(){
return this.a;
}
}
进入这种函数对象:
function object(){};
object.a = 2;
object.b = function(){
return this.a;
};
这可能吗?我怎么能动态地这样做?
答案 0 :(得分:2)
你可以复制一切,但我会使用原型:
function toClass(obj) {
var func = function () {};
for(var i in obj) {
if(obj.hasOwnProperty(i)) {
func.prototype[i] = obj[i];
}
}
return func;
}
另一个问题是这实际上是多么有用,以及是否有更好的解决方案来解决潜在的问题。
答案 1 :(得分:0)
你需要这样的东西有点奇怪。如果我不得不猜测,我认为你有一个对象,你想扩展它。即您希望基于该对象创建函数,以便稍后创建它的多个实例。这是可能的,这里是一个小片段,展示了如何:
var object = {
a: 2,
b: function(){
return this.a;
}
}
var extend = function(obj) {
return function() {
return Object.create(obj);
}
};
var Class1 = extend(object);
var ob1 = Class1();
ob1.a = 10;
var Class2 = extend(object);
var ob2 = Class2();
ob2.a = 23;
console.log(ob1.b(), ob2.b());
脚本的结果是
10 23