2013-01-18 40 views
0

可以说,我有一个JavaScript类,看起来像这样:如何动态地分配JavaScript对象的新成员?

var Person = { 
    //Private members 

    getXmlRequestObj : function() { 
      if (window.XMLHttpRequest) { 
       return new XMLHttpRequest(); 
      } else if(window.ActiveXObject) { 
       return new ActiveXObject("Microsoft.XMLHTTP"); 
      } else { 
       return "Your Browser needs an upgrade"; 
      } 
     }, 

initialize: function() { 
     Person.importHTML = Person.getXmlRequestObj(); 
    }, 


    //Set up the global content retrieval object 
    //called importHTML 
    //importHTML: new ActiveXObject("Microsoft.XMLHTTP"), 

    _status:'', 

    getAjaxList:function(sWhat,sUrl) { 
     if (Person.importHTML.readyState == 4 || Person.importHTML.readyState == 0) { 
      Person.importHTML.open("GET", sUrl, false);// make it wait for the response 
      Person._sWhat = sWhat; 
      Person.importHTML.onreadystatechange = Person.handleListArrived; 
      Person.importHTML.send(null); 
     }  
    }, 
    handleListArrived: function() { 
     if (Person.importHTML.readyState == 4) { 
      if(Person._sWhat=="units") 
       Person._unitList = Person.importHTML.responseText; 
      if(Person._sWhat=="ranks") 
       Person._rankList = Person.importHTML.responseText; 
     } 
    } 
} 

而不是使用此代码:

  if(Person._sWhat=="units") 
       Person._unitList = Person.importHTML.responseText; 
      if(Person._sWhat=="ranks") 
       Person._rankList = Person.importHTML.responseText; 

我想它使用任何Person._sWhat是成为新成员人。换句话说 我该如何动态地分配Person的新成员?从而使代码看起来像这样:

Person.something to Person._sWhat = Person.importHTML.responseText;

+0

'var something ='units'; Person [something] = Person.importHTML.responseText;' – Shmiddty

回答

0

点符号是在JavaScript中的便利性,等效于方括号:

Foo.xyz === Foo['xyz'] 

所以,你的情况

Person[Person._sWhat+"List"] = Person.importHTML.responseText 

就足够了,但您的_sWhat字段中的尾随"s"已足够。如果你可以在其他地方删除,那将是理想的。或者:

Person[Person._sWhat.slice(0,-1)+"List"] = Person.importHTML.responseText 
+0

我会回家的时候试试这个......非常感谢! –

+0

太棒了;不要忘记接受最能帮助你的答案。这对你有好处,对你有好处。 – Dancrumb

0
getAjaxList:function(sWhat,sUrl) { 
    if (Person.importHTML.readyState == 4 || Person.importHTML.readyState == 0) { 
     Person.importHTML.open("GET", sUrl, false);// make it wait for the response 
     Person.importHTML.onreadystatechange = Person.handleListArrived.bind(Person.importHTML, sWhat); //bind is supported in IE9+ 
     Person.importHTML.send(null); 
    }  
}, 
handleListArrived: function(sWhat) { 
    if (this.readyState == 4) { 
     Person[sWhat] = this.responseText; 
    } 
} 

或者,下面以来的ECMAScript 1.3支持:

getAjaxList:function(sWhat,sUrl) { 
    if (Person.importHTML.readyState == 4 || Person.importHTML.readyState == 0) { 
     Person.importHTML.open("GET", sUrl, false);// make it wait for the response 
     Person.importHTML.onreadystatechange = function(){ 
      Person.handleListArrived.call(Person.importHTML, sWhat); 
     }; 
     Person.importHTML.send(null); 
    }  
}