When I add items to the beats array and then console.log the User, I'm getting the correct number of items in the array. But when I check .length, I always get 1. Trying to call the index will always give me 'undefined' like so: Tom.beats[1] I think I'm missing something obvious, but this is beating me. I suspect that I'm misusing the .push method but I'm unsure. Any help is greatly appreciated! (using Chrome dev tools)

//The USER

function User(name, role){
    this.beats = [ ]; 

    this.name = name;
    this.role = role;

    // add beats to beats array

    this.addBeats = function(beats){ 
        return this.beats.push(beats);
   };

}

// Three New Instances. Three New Users.

var Mal = new User("Mal", "Rapper");
Mal.addBeats(["love", "cash"]);

var Dan = new User("Dan", "Producer");
Dan.addBeats(["cake", "dirt", "sally-mae"]);

var Tom = new User("Tom", "Producer");
Tom.addBeats(["Fun", "Little", "Samsung", "Turtle", "PC"]);

// Check for position in beats array

console.log(Tom.beats); 
console.log(Mal.beats); 
console.log(Dan.beats); 

console.log(Mal.beats[1]);
console.log(Dan.beats[1]);
console.log(Tom.beats[1]);
share|improve this question
I wonder if the this pointer is getting confused in the addBeats function. Can you step-through it in a JS debugger? (IE9 has one). – Dai Jun 17 '12 at 23:43

2 Answers

up vote 5 down vote accepted

Array.push(...) takes multiple arguments to append to the list. If you put them in an array itself, this very array of "beats" will be appended.

Array.concat(...) is most likely not what you are looking for, because it generates a new array instead of appending to the existing one.

You can use [].push.apply(Array, arg_list) to append the items of the argument list:

this.addBeats = function(beats) { 
    return [].push.apply(this.beats, beats);
};
share|improve this answer
1  
Hooray for MDN links! – mu is too short Jun 18 '12 at 0:12
Using your, method, it works how I intended now. Thanks! So, my return line was totally incorrect... – MFrazier Jun 18 '12 at 1:13

addBeats() should concat this.beats with the beats parameter.

share|improve this answer

Your Answer

 
or
required, but never shown
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.