2013-08-29 71 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 
相關問題