2013-11-09 111 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