获取和设置属性的JavaScript

时间:2013-11-09 06:53:35

标签: javascript object

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

3 个答案:

答案 0 :(得分:1)

你在这里遇到了一些问题。

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

应该是

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

然后,推送是一个功能,使用()而不是[]

this.choices.push(choice);

然后,当该函数看起来像是一次设置一个项目时,您的测试代码将整个数组传递给setChoice。所以你要将1个元素推入数组,这是整个选择数组。您可能希望为每个元素调用setChoice而不是一次。虽然你的setChoice确实应该被命名为addChoice,因为它添加了一个元素,但是没有设置整个数组。我希望setChoice能够重新分配整个数组。这实际上取决于你真正想要的功能。

http://jsfiddle.net/unw3R/

答案 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