I have doubts about understanding the principles of methods.
I understand functions and I know that
function hello() {
    alert('Hello World');
}  
is the same as
var hello = function() {
    alert('Hello World');
}  
Now, what's my problem is.
Here is my object with one method. I don't understand why 
parenthesis are don't needed at yarsLeft inside function people()
I am looking for a logical explanation.
function people(name, age) {
    this.name = name;
    this.age = age;
    this.yearsUntilRetire = yearsLeft; // this is confised for me
}
function yearsLeft() {
    var numYears = 65 - this.age;
    return numYears;
}
Create object
var test = new people('Superman', 50);
test.yearsUntilRetire(); // I understand this code and calling a method in that way
Why I can't write this.yearsUntilRetire() = yearsLeft or this.yearsUntilRetire = yearsLeft();
When you use the name of a function without parentheses ( ()) you are setting a reference to the function itself. 
When you use the same function with parentheses you are executing the function.
Therefore this line
this.yearsUntilRetire = yearsLeft;
Is setting yearsUntilRetire to point to the function. Thereafter you can do this:
this.yearsUntilRetire(); // execute the yearsLeft function.
Why I can't write this.yearsUntilRetire() = yearsLeft or this.yearsUntilRetire = yearsLeft();
In the first case, you cannot set the result of calling a function to a different result - it is a syntax error.
In the second case, you can - it sets the variable yearsUntilRetire to the result of calling the function yearsLeft
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With