我正在尝试使用javascript对象,但没有走得太远。任何想法为什么这不起作用?
function Tracking(){
var choices = new Array();
}
Tracking.prototype.getChoice = function (key){
return this.choices[key];
}
Tracking.prototype.setChoice = function (choice){
this.choices.push[choice];
}
function TrackingChoice(key, choice){
this.key = key;
this.choice = choice;
}
.....
var tracking = new Tracking();
var choices = new Array();
choices.push(new TrackingChoice("purchase", true));
choices.push(new TrackingChoice("listing", false));
choices.push(new TrackingChoice("offers", false));
choices.push(new TrackingChoice("messages", false));
tracking.setChoice(choices);
var a = tracking.getChoice(0);
var a
为空,因为Tracking
对象中的choices数组仍为null。这让我很困惑。
答案 0 :(得分:1)
你在这里遇到了一些问题。
function Tracking(){
var choices = new Array();
}
应该是
function Tracking(){
this.choices = new Array();
}
然后,推送是一个功能,使用()
而不是[]
:
this.choices.push(choice);
然后,当该函数看起来像是一次设置一个项目时,您的测试代码将整个数组传递给setChoice
。所以你要将1个元素推入数组,这是整个选择数组。您可能希望为每个元素调用setChoice
而不是一次。虽然你的setChoice
确实应该被命名为addChoice
,因为它添加了一个元素,但是没有设置整个数组。我希望setChoice
能够重新分配整个数组。这实际上取决于你真正想要的功能。
答案 1 :(得分:1)
试试这个
function Tracking(){
this.choices = []; var count = 0;
this.getChoice = function (key){
return this.choices[key];
};
this.setChoice = function (choice){
this.choices[count] = choice;count++;
};
}
function TrackingChoice(key, choice){
this.key = key;
this.choice = choice;
}
var tracking = new Tracking();
var choices = new Array();
tracking.setChoice(new TrackingChoice("purchase", true));
tracking.setChoice(new TrackingChoice("listing", false));
tracking.setChoice(new TrackingChoice("offers", false));
tracking.setChoice(new TrackingChoice("messages", false));
var a = tracking.getChoice(0);
答案 2 :(得分:0)
问题在于:
Tracking.prototype.setChoice = function (choice){
this.choices.push[choice];
}
你正在读取选择数组的push方法中的choice属性,它实际上没有做任何事情 - 它将读取属性并返回它,但它将返回undefined
并且该值不存储或在任何地方使用。
您应该在this
上设置choices属性:
Tracking.prototype.setChoice = function (choice){
this.choices = choice;
}
有关正确使用推送方法的更多示例,请查看Array.push() method。