I don't understand why necessary? 25. Private Methods


#1

function Person(first,last,age) {
this.firstname = first;
this.lastname = last;
this.age = age;
var bankBalance = 7500;

var returnBalance = function() {
return bankBalance;
};

// create the new function here
this.askTeller = function(){
return returnBalance;
}

}

var john = new Person('John','Smith',30);
console.log(john.returnBalance);
var myBalanceMethod = john.askTeller();
var myBalance = myBalanceMethod();
console.log(myBalance);

I don't get why after creating the variable "myBalanceMethod", the variable myBalance was created? Please explain in good detail and not a rush statement. This is not so easy for me to understand


#2

@killerg,

++ 1/2 ++ 25/30 bankbalance explained
https://www.codecademy.com/forum_questions/55f03d4b93767651db0005b3
or
https://www.codecademy.com/forum_questions/55f9a2dbe39efe8fcc0001e8
or
http://www.codecademy.com/forum_questions/5485bacc93767670a80024e8
What they are trying to make clear,
is that after calling the public-accessable askTeller method

you still don't have the actual value of the property-key -bankBalance

because the askTeller-function returns the name of a function

this function must be executed and then you get the Value of bankBalance.

A two-step approach, as you have to execute-twice.

As the () sign means execute, you could also get the result by using

console.log( john.askTeller()() );

+++++++++++++++++++++++++++++
++ 2/2 +++ 25/30 bankbalance explained
1 You have to create a so-called public askTeller Method...
meaning you have to use the this-keyword and NOT the var-keyword

2 the askTeller Method should return returnBalance
and NOT as you are doing returning the bankBalance

= = = = = = = = = = = = = = = = = = = =

Here is the wording of the exercise...read it once more....

Private Methods

Why did that code in [24] work ?
An object's private variables
can only be accessed by other methods
that are part of that same object.

So, in [24] we just used an object's public method
to access a private variable!

Methods can also be private within a class and inaccessible outside of the class. Changing
this.returnBalance
from the last exercise to
var returnBalance
makes this method private.

If you run the program trying to access the method
you would get an undefined error this time.

The way to access a private method
is similar to accessing a private variable.

You must create a public method for the class, using the this-keyword
that returns the private method.

Instructions::

Create a method called askTeller within the Person class
that returns the returnBalance method.

This means that it returns the method itself
and NOT the result of calling that method.
So you should NOT have parentheses after returnBalance.

Because askTeller returns a method,
we need to call it to make it any use.
This is what var myBalance = myBalanceMethod(); does.

Hint

Your method should resemble how we defined getBalance last time—
you should use
this.askTeller = function() { }.

Don't declare askTeller with var.

You return method the same way
that you would return simple variables.
Be careful not to call the method though
and leave out parentheses in your return statement!