2013-08-29 37 views
1

是否有转换/克隆此对象的任何动态的方式:如何转换对象文本功能

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

陷入这种功能的对象:

function object(){}; 

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

这可能吗?我怎样才能动态地做到这一点?

回答

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/

+0

难道这是冲着我一个问题吗?如果是这样,请更具体。为什么我会怎样? –

+0

+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 
相关问题