Daniel Dropik
Daniel Dropik

Reputation: 783

Javascript syntax, using functionName vs. functionName()

Considering This:

  var genericGreet = function() {
    return "Hello, my name is " + this.name;
  }

  var andrew = {
    name: "Andrew",
    greet: genericGreet
  }

  var ryan = {
    name: "Ryan",
    greet: genericGreet
  }

</script>

Why is it wrong to say greet: genericGreet() or greet: genericGreet();. The above is from an interactive quiz in a series of online learning for javascript at treehouse.com, and the interactive quiz is telling me that these would be incorrect, and I don't know why.

Upvotes: 0

Views: 58

Answers (1)

thefourtheye
thefourtheye

Reputation: 239473

greet: genericGreet

will let greet also to point to the object pointed by genericGreet. So, greet is now an alias for the same function. But when you say

greet: genericGreet()

you are making greet point to the returned value of the genericGreet function. If you intend to call greet later on, then you should use

greet: genericGreet

only. Normally, people use Prototypal pattern to implement this

function PersonGreeter(personName) {
    this.name = personName; 
}

PersonGreeter.prototype.greet = function() {
    return "Hello, my name is " + this.name;
};

var andrew = new PersonGreeter("Andrew");
console.log(andrew.greet());
var ryan   = new PersonGreeter("Ryan");
console.log(ryan.greet());

Output

Hello, my name is Andrew
Hello, my name is Ryan

Upvotes: 1

Related Questions