2012-11-24 67 views
2

有一些麻煩「這」的行爲,因爲我希望它 -使用「這」在Javascript對象

基本上,我有一個對象,我無法從訪問數組中的對象同一個對象中的功能 -

它看起來像這樣:

var articles = { 
    article : { 
     1: { 
      title : 'This is a Title', 
      content : 'This is the content of the article' 
     }, 
     2: { 
      title : 'This is the second article', 
      content : 'This is the second article content' 
     }, 
     3: { 
      title : 'This is the third article', 
      content : 'Making information transferrable. Identifiable. Manipulatable.' 
     } 
    }, 
    numArticles : function(){ 
     var size = 0, key; 
     for (key in this.article){ 
      if(this.article.hasOwnProperty(key)) size++;    
     } 
     return size; 
    }, 
    buildInterface : function(){ 
     var aSize = this.numArticles(); 
     for(var i = 0; i < aSize; i++){ 
      $('body').append('<article><h2>' + this.article[i].title + '</h2></article>');    
     } 
    } 
} 

的buildInterface()函數是無法訪問「文章」陣列中的這個場景。

下面是這個正在進行中的例子:

http://jsfiddle.net/merk/xV2n6/41/

任何幫助,在這裏,將不勝感激 -

我有一種預感,它可能是一個範圍的問題 - 希望這是不是相關的到的jsfiddle -

由於一噸 -

和平

馬克

+0

@thatidiotguy這是變量「文章」... – Pointy

+0

@Pointy:我認爲這個白癡意味着「我沒有看到一個數組」:p j/k – jAndy

+1

@jAndy爲我的白癡道歉。我確實有名字! – thatidiotguy

回答

3

你有不一致的索引你的article變量:屬性定義從1開始,但你從0buildArticles方法for循環開始。你可以解決這個問題...

for(var i = 1; i <= aSize; i++){ 
    $('body').append('<article><h2>' + this.article[i].title + '</h2></article>');    
}; 

...或(這就是很多我的口味更好,因爲你基本上要使用的陣列的工作對象)重寫article定義成適當陣列:

article : [{ 
     title : 'This is a Title', 
     content : 'This is the content of the article' 
    }, { 
    title : 'This is the second article', 
    content : 'This is the second article content' 
    }, { 
    title : 'This is the third article', 
    content : 'Making information transferrable. Identifiable. Manipulatable.' 
    }], 
... 

...離開你buildArticles for循環,因爲它現在是(如索引現在可以正確地從0開始)。

順便說一句,這種方式,你甚至不需要做一個特殊的功能來計算你的文章:article.length就夠了。

這裏的JS Fiddle與這種方法的說明。


一點題外話,如果你實際上已經檢查了調試器,你會發現它的this.articles[0]undefined(所以試圖採取title出它是錯誤的),而不是this.articles。因此它絕對不是範圍問題。

+0

確定酷 - 我會給這個鏡頭 - 感謝您的反饋 - –

+0

關於正確的陣列技巧的絕佳建議 - 絕對要切換到 - –

0

這應該工作:

var articles = { 
    article : { 
     1: { 
      title : 'This is a Title', 
      content : 'This is the content of the article' 
     }, 
     2: { 
     title : 'This is the second article', 
     content : 'This is the second article content' 
     }, 
     3: { 
     title : 'This is the third article', 
     content : 'Making information transferrable. Identifiable. Manipulatable.' 
     } 
    }, 
    numArticles : function(){ 
     var size = 0, key; 
     for (key in this.article){ 
      if(this.article.hasOwnProperty(key)) size++;    
     } 
     return size; 
    }, 
    buildInterface : function(){ 
     var aSize = this.numArticles(); 
     for(var i = 1; i <= aSize; i++){ 
      console.log('<article><h2>' + this.article[i]['title'] + '</h2></article>');    
     }; 
    } 
} 

的問題,你的情況,你已經開始用你的數組中的零位置的元素。但你沒有0元素。所以它會給你一個錯誤。這是按預期工作的。