如何将对象文字转换为函数

时间:2013-08-29 19:03:25

标签: javascript-objects javascript

是否有任何动态方式来转换/克隆此对象:

var object = {
    a: 2,
    b: function(){
         return this.a;
    }
}

进入这种函数对象:

function object(){};

object.a = 2;
object.b = function(){
    return this.a;
};

这可能吗?我怎么能动态地这样做?

2 个答案:

答案 0 :(得分:2)

你可以复制一切,但我会使用原型:

function toClass(obj) {
    var func = function () {};
    for(var i in obj) {
        if(obj.hasOwnProperty(i)) {
            func.prototype[i] = obj[i];
        }
    }

    return func;
}

另一个问题是这实际上是多么有用,以及是否有更好的解决方案来解决潜在的问题。

小提琴:http://jsfiddle.net/pb8mv/

答案 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