www.webdeveloper.com
Results 1 to 4 of 4

Thread: Question about methods.

  1. #1
    Join Date
    Dec 2012
    Posts
    54

    Question about methods.

    Hi!

    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.

  2. #2
    Join Date
    Dec 2012
    Posts
    54
    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?

  3. #3
    Join Date
    Aug 2008
    Location
    Sweden
    Posts
    227
    I'll try to explain...
    Quote Originally Posted by Lesshardtoofind View Post
    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).
    Last edited by ReFreezed; 12-29-2012 at 06:15 PM.

  4. #4
    Join Date
    Dec 2012
    Posts
    54
    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.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles