add Object to inventory GUI

these are my object code and inventory code
I want when I Add a new class, it shows on GUI in a new Button
But it will change all the buttons!
what should I do?

Object Code:

#pragma strict
    private var itemName : String;
    var itemIcon : Texture;
    var itemDesc : String;
//////////////////////////////////////////
function Start () {
itemName = this.gameObject.name;
}

function OnGUI()
{

if (GUI.Button(Rect(11,11,55,55),"Add") && Inventory.item.Count < 14)
{
var itemToAdd :itemClass = new itemClass();
Inventory.item.Add(itemToAdd);

itemToAdd.itemName = itemName;
itemToAdd.itemIcon = itemIcon;
itemToAdd.itemDesc = itemDesc;
}
}

Inventory Code:

#pragma strict
import System.Collections.Generic;
static var item = new List.<itemClass>(); 
class itemClass
    {
    var itemName : String;
    var itemIcon : Texture;
    var itemDesc : String;
    }
//////////////////////////////////////////////////
function OnGUI(){

var xoffset : float =  0f;

for(i in item)
{
xoffset -=56;
GUI.Button(new Rect(800+xoffset,100,50,50),item[item.Count-1].itemName);
}

}

You only use one type of item.

Here is some better code(I use c#, but I will try to convert).

Example 1.

function OnGUI(){
 
var xoffset : float =  0f;
 
for(int i = 0; i < item.Count; i++)
{
xoffset -=56;
//You put in item[item.Count-1].itemName, so it only used that item for each button, instead use item*.itemName also this is a different type of for loop, if it does not work, just use example 2.*

GUI.Button(new Rect(800+xoffset,100,50,50),item*.itemName);*
}

}
Example 2.
function OnGUI(){

var xoffset : float = 0f;
var cnt : int = 0;

for(i in item)
{
xoffset -=56;
//Example 2 changed for loop.
GUI.Button(new Rect(800+xoffset,100,50,50),item[cnt].itemName);
cnt++;
}

}