如何动态分配javascript对象的新成员?
假设我有一个javascript类,如下所示:如何动态分配javascript对象的新成员?,javascript,object,properties,Javascript,Object,Properties,假设我有一个javascript类,如下所示: var Person = { //Private members getXmlRequestObj : function() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if(window.ActiveXObject) { retu
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的新成员?从而使代码看起来像这样:
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;
}
}
}
Person.something对Person的影响
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);
}
}
点表示法在JavaScript中是一种方便的表示法,相当于方括号表示法:
Foo.xyz === Foo['xyz']
那么,在你的情况下
Person[Person._sWhat+"List"] = Person.importHTML.responseText
如果没有\u sWhat
字段中的尾随“s”
,就足够了。如果你能把它移到别处,那将是理想的。或者:
Person[Person._sWhat.slice(0,-1)+"List"] = Person.importHTML.responseText
var某物='units';Person[某物]=Person.importHTML.responseText代码>我回家后会试试这个…非常感谢!伟大的不要忘记接受对你最有帮助的答案。这对谁都有好处,对你也有好处。