0

我正在尝试使用 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仍然为空。这让我很困惑。

4

3 回答 3

1

你这里有几个问题。

function Tracking(){
    var choices = new Array();
}

应该

function Tracking(){
    this.choices = new Array();
}

然后, push 是一个函数,使用()not []

this.choices.push(choice);

然后,您的测试代码将整个数组传递给setChoice该函数看起来一次设置一个项目的时间。因此,您会将 1 个元素推入数组,即整个选择数组。您可能希望调用setChoice每个元素而不是一次。尽管确实setChoice应该在addChoice添加元素时命名您,但并没有设置整个数组。我希望setChoice只重新分配整个数组。这实际上只取决于您打算该功能真正做什么。

http://jsfiddle.net/unw3R/

于 2013-11-09T07:01:45.180 回答
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);
于 2013-11-09T07:10:13.737 回答
0

问题在这里:

Tracking.prototype.setChoice = function (choice){
    this.choices.push[choice];
}   

您正在从选择数组的 push 方法中读取选择属性,它实际上并没有做任何事情 - 它会读取属性并返回它,但它会返回undefined并且该值不会在任何地方存储或使用。

相反,您应该将选项属性设置为this

Tracking.prototype.setChoice = function (choice){
    this.choices = choice;
}   

查看Array.push() 方法以获取有关正确使用 push 方法的更多示例。

于 2013-11-09T07:05:43.237 回答