任何人都可以告诉我为什么这个脚本不能正常工作以及如何解决它?
问题是当使用alert()调试存储的值时,对于buyerGuideData ["英语"]语言,数据以西班牙语而不是英语出现。语言。
var enumLanguage = { English: 'English', Spanish: 'Spanish' }
var buyersGuideData = [];
var foo = { Language: '', WarrantyFlag: 'No' }
//Build list array of objects...
buyersGuideData[enumLanguage.English] = foo;
buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLanguage.Spanish] = foo;
buyersGuideData[enumLanguage.Spanish].Language = "Spanish";
alert(buyersGuideData[enumLanguage.English].Language); //Output was displayed as "Spanish", not English...
alert(buyersGuideData[enumLanguage.Spanish].Language); //Output was displayed as "Spanish"...
[编辑 - 新例子] - 这是你的意思吗?
buyersGuideData[enumLanguage.English] = { Language: '', WarrantyFlag: 'No' }
buyersGuideData[enumLangauge.Spanish] = { Langauge: '', WarrantyFlag: 'No' }
buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLangauge.Spanish].Language = "Spanish";
答案 0 :(得分:2)
只需将函数用作对象生成器即可解决此问题。用这样的foo函数替换foo对象
var foo = function () {
return {
Language: '',
WarrantyFlag: 'No'
};
}
然后更改分配对象的方式
buyersGuideData[enumLanguage.English] = foo();
buyersGuideData[enumLanguage.English].Language = "English";
buyersGuideData[enumLanguage.Spanish] = foo();
buyersGuideData[enumLanguage.Spanish].Language = "Spanish";
每次调用foo时都会实例化一个全新的对象。在您的示例中,您使用的是同一个对象,这就是为什么显示不受欢迎的行为。
答案 1 :(得分:1)
您将同一个对象分配给两个不同的位置,然后两次修改该对象。
您需要的是两个不同的对象。创建它两次:
buyersGuideData[enumLanguage.English] = { ... }
如果您想从模板开始,可以使用merging。
答案 2 :(得分:0)
您遇到语法错误:
alert(buyersGuideData[enumLanguage.English].Langauge); //Output was displayed as "Spanish", not English...
alert(buyersGuideData[enumLanguage.Spanish].Langauge);
Langauge错了,请尝试语言