JavaScript动态对象范围

时间:2016-03-07 13:56:14

标签: javascript jquery html object scope

是否可以在另一个范围内使用创建的对象?

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 
});   

有没有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:4)

使用,

this.name = _name;

而不是,

var name = _name;

如果您没有将name分配给当前对象,那么该{@ 1}}将成为该构造函数的local variable。这也适用于os

另外一个主要错误是,无论何时创建instance,您都要通过递增variable来更新一个count。因此,如果您创建了2个实例,那么您的2个对象将分别存储为'pc0''pc1'。但计数iZ将为2。现在,如果您当时访问'pc2',则不会获取它,因为它未被创建。所以你可以通过重写代码来修复它,如下所示,

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

答案 1 :(得分:0)

现在可以使用:

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