I am pretty new to Javascript and I've read a few pages about Objects and Methods, but I think I'm still fuzzy on a few things I hope someone can clear things up!
Code:
function pizza()
{
this.cooked = false;
var spoiled = false;
this.cook = cook;
function cook(){
cooked = true;
}
function spoil(){
spoiled = true;
}
}
Is spoil() private and cook() public?
If so then are the variables treated the same?
I am coming from a C++ background just trying to translate things over to where I'm comfortable. I'm so used to using classes I feel weird trying to program without them.
Any additional information pertaining to methods and objects that I didn't directly ask for is more than welcome.
Thank you for your time,
Happy Holidays.
12-25-2012, 02:47 AM
Lesshardtoofind
Well it seems if I don't make a function preceed with the declaration and definition
Code:
this.functionName = functionName;
function functionName(){
}
Then I can't call that function later which relates to my thoughts on public and private. On the other hand it seems if a variable inside a function isn't given a
Code:
this.variableName = something;
but rather
Code:
variableName = something;
Then all the objects of the same type will share the same value of variableName....
does
Code:
this.variableName
make it unique or am I just using variables out of scope and dealing with undefined behavior as results?
12-29-2012, 05:11 PM
ReFreezed
I'll try to explain...
Quote:
Originally Posted by Lesshardtoofind
Code:
function pizza()
{
this.cooked = false;
var spoiled = false;
this.cook = cook;
function cook(){
cooked = true;
}
function spoil(){
spoiled = true;
}
}
'this' is a reference to the new object you've created and has no custom properties in the beginning of the pizza function. this.cooked = false adds a new (public) property cooked to the object. (All properties of all objects are actually public.) var spoiled = false creates a locally accessible variable spoiled inside the scope of the pizza function. It's not really a property of the object directly (because you don't say this.spoiled = false), but the variable is only accessible inside the pizza function (including inside functions and methods created inside the pizza function) so I suppose you could call spoiled private.
Like with the cooked property, this.cook = cook adds a new (public) property cook which will contain the local cook function. (It'll be a method in other words.) This does work in JavaScript because it doesn't matter whether you declare/define functions before or after you call or reference them:
Code:
function a() {
alert('A');
}
a(); // works
b(); // also works
function b() {
alert('B');
}
Your cook method could also be created like this:
Code:
this.cook = function() {
cooked = true;
};
However, there is something that won't work as expected in your cook function: cooked = true will actually set a global variable cooked (because cooked has not been declared with var anywhere in the code, thus it's considered a global). It should say this.cooked = true because you want to set the (public) property of the object.
spoiled = true does as expected though - it sets the locally accessible variable spoiled inside the pizza function.
To sum it up: use this when dealing with public properties, and use var when declaring private properties. And to answer your question - yes, spoil() is private and cook is public (even though private and public might not be completely accurate words to use in JavaScript).
12-30-2012, 01:05 AM
Lesshardtoofind
Thanks for the response. I was trying to get things sorted out as I wasn't getting the results I expected from methods I was using. I eventually got the game to behave, but I wanted to know WHY everything was working the way it was.