2016-03-07 92 views
0

是否可以在另一個作用域中使用創建的對象?JavaScript動態對象範圍

var iZ = 0; 
var pcs = {}; 
function Pc(_name, _os) //Constructor 
{    
    this.name = _name; // Pc Name 
    this.os = _os; //Pc Os 
    this.ausgabe = function() 
    { 
    //Do something 
    }; iZ++; 
} 
//Creating a new object 
document.getElementById("pc_create").addEventListener("click", function() 
{ 
     pcs['pc' + iZ] = new Pc('Pc '+ iZ , os); 
     pcs['pc' + iZ].ausgabe();  
}); 
//Using object in another scope 
document.getElementById("run").addEventListener("click", function() 
{ 
     pcs['pc' + iZ].name = "test"; // Doesnt work 
}); 

有沒有別的方法可以解決這個問題?

+0

見狀IZ遞增和內部的onclick讓我不知道這是否是真正的問題引用。 – epascarello

+0

嘿,你完全改變了你的代碼! o_0 –

回答

4

使用,

this.name = _name; 

相反的,

var name = _name; 

如果不指定name到當前對象,那麼這將成爲local variable該構造函數。這也適用於os

此外,主要的錯誤是,無論何時你創建一個instance你正在更新一個variable增量它的count。所以如果你創建了2個實例,那麼你的2個對象將分別存儲爲'pc0''pc1'。但計數iZ將是2。現在,如果您當時訪問'pc2',它將不會被提取,因爲它沒有被創建。所以,你可以通過重新編寫類似下面的代碼修復它,

pcs['pc' + (iZ-1)].name = "test"; 
+0

另外指出'}); iZ ++'是錯誤的,因爲那裏有一個額外的大括號。 – gurvinder372

+1

@ gurvinder372這是OP的拼寫錯誤。現在請檢查他的問題。看起來他自己糾正了它。 –

+0

@shiroxxs發現了你的錯誤。現在檢查。 –

0

這現在工作:

document.getElementById("run").addEventListener("click", function() 
{ 
     pcs['pc' + iZ].name = "test"; // Now work 
}); 
+0

如果遞減它,那麼在創建新實例時,已有的實例將被替換。 –

+0

是的,很快見到了..但是謝謝你! – shiroxxs