2014-07-05 71 views
0

我首先對標題表示歉意。將屬性對象的選定對象從原型推送到數組中

我已經被實例化這個原型是尚未:

noZoomzoom對象將充滿對實例化對象。

我想推到所有屬性noZoom對象中的propertiesToIlluminate array所有對象在我Persona構造。

function Persona() { 
    this.headArea = { 
     noZoom: {}, 
     zoom: {} 
    } 
    this.torsoArea = { 
     noZoom: {}, 
     zoom: {} 
    } 
    this.arm = { 
     noZoom: {}, 
     zoom: {} 
    } 
    this.leg = { 
     noZoom: {}, 
     zoom: {} 
    } 
    this.pelvis = { 
     noZoom: {}, 
     zoom: {} 
    } 
    this.abdomen = { 
     noZoom: {}, 
     zoom: {} 
    } 

    this.illuminate = function() { 
     var propertiesToIlluminate = [], 
      prop, illuminateInternal, i = 0, 
      delay = 100, 
      intervalId; 
     for (prop in //what to put here//) { 
      propertiesToIlluminate.push(prop); 
     } 
    } 
} 

回答

2

試試這個:

for (prop in this) { 
    if (this[prop].noZoom) { 
     for (key in this[prop].noZoom) { 
      if (this[prop].noZoom.hasOwnProperty(key)) { 
       propertiesToIlluminate.push(this[prop].noZoom[key]); 
      } 
     } 
    } 
} 
+0

謝謝,但是這會返回noZoom對象中的對象。我想從該對象中獲取「值」,所以看來我最終需要在迭代中進一步深入一步。有什麼想法嗎? –

+0

我添加了另一個嵌套循環來獲取對象中的所有值。 – Barmar

+0

但是由於'propertiesToIlluminate'是一個數組而不是一個對象,這會丟失'noZoom'對象中的屬性名稱,它只是獲取它們的值。 – Barmar

1

這可能是有意義保持屬性的列表,然後減少構建陣列。例如:

function Persona() { 
    var properties = ["headArea", "torsoArea", "..."]; 
    // ... 

    this.illuminate = function() { 
    var self = this; 
    var propertiesToIlluminate = properties.reduce(function(arr, propName) { 
     var noZoom = self[propName].noZoom; 
     for (var prop in noZoom) { 
     if (noZoom.hasOwnProperty(prop)) { 
      arr.push(noZoom[prop]); 
     } 
     return arr; 
     } 
    }, []); 
    } 
} 

相同的列表也可能有用於實例化對象開始,迭代它來構建初始狀態。

for (var i=0; i<properties.list; i++) { 
    this[properties[i]] = {noZoom: {}, zoom: {}}; 
} 

如果需要,它也可以暴露在原型上,所以其他代碼可以輕鬆獲得所有屬性的列表。

相關問題