2013-07-13 95 views
0

我敢肯定,這已被地方解釋,但我從來沒有發現它是這樣,我來到這裏:將對象添加到對象中的JavaScript

比方說,我有一個包含對象的功能移動,攻擊,防禦。如何將它們添加到單元對象,而不一次添加它們,或者添加一個sub.object:units.commands = commands,而是:units = commands或units.prototype = commands。

另一個簡單的例子:

var one = function () { 
     this.a = 1; 
    }; 
    var two = function () { 
     this.z = 1; 
    }; 
    var jee = new one(), 
    jee2 = new two(); 
    jee = jee2; 
    console.log(jee); // Should have z AND a. 
+1

查看淺層和深層複製。更具體地說,在你的情況下,深層複製。 – jrd1

+0

你現在正在做的是:(1)用變量'jee2'來混淆全局範圍。 (2)用指向對象'two'的指針覆蓋指向對象'one'的指針。 – Sumurai8

+1

您是否希望從對象繼承或在對象中注入功能?這是一個答案,將讓你去繼承:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR

回答

3

你可以再拍功能three從其他兩個取值,比如:

var Three = function(){ 
    one.call(this); 
    two.call(this); 
} 

var three = new Three; //=> Three{a:1, z:1} 

隨着underscore你甚至可以組成功能的完全稱呼他們:

var Three = function(){ 
    _.compose(one, two).call(this); 
} 
+0

+1第一種解決方案將很好地爲OP合併一個和兩個。它不會複製一個和兩個原型中的任何一個,但OP給出的示例代碼不使用原型。 – HMR

0

你將不得不遍歷一個對象的每個屬性,一個接一個將它們複製到其他對象。

1

你在尋找什麼,是如何繼承另一個對象的屬性。這不是通過簡單地將一個對象的指針覆蓋到另一個對象來完成的。我認爲this page可以幫助你。

+0

有可能是我的一些問題,原因是一個原型對我來說很困難,但在這種情況下,他們似乎也沒有什麼幫助。是可以添加多個原型到一個對象。即:一個.__ proto__ =兩個;一個.__ proto__ =三個; ?其實我認爲它可以被認爲是,我試圖實現多重繼承。因此不止一次地設置原型。幾乎JavaScript中的每個示例都使用「子對象」爲對象添加功能/變量,即:「one.something = something」,從不「one + = something」,「one = something」等。 – Hachi

1

看着評論你可以採取幾種方法。

  1. 合併的對象(對不起,這裏使用jQuery,但克隆的對象不是那麼容易的,需要一大堆的代碼)進行合併的對象,你可以從一個對象使用$.extend
  2. 繼承,如果你計劃對象2擴展一個參見here
  3. 注入對象的功能。目前沒有示例代碼。