2013-11-09 76 views
0

我正在尝试使用JavaScript对象,但没有变得很远。任何想法,为什么这不起作用?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对象仍然空是空的。这让我困惑。

回答

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); 
+0

甜感谢队友,但我不知道为什么.push( )没有工作,因为我一直在使用它 – sapatos

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/

+0

'新的Array()'应该是'[]' –

0

的问题是在这里:

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

您正在阅读的选择物业断选择阵列并没有真正做任何事情的push方法 - 它会读取属性和返回它,但它将返回undefined并且该值不会在任何地方存储或使用。有关正确使用push方法

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

退房的Array.push() method有更多的例子:

你,而不是应该设置选择属性上this

+0

啊该死的,谢谢,我已经错过htat – sapatos