Search code examples
javascriptoopprivateprototypejsprotected

Using Prototype's Class.create to define private/protected properties and methods


There is a good generalized method for defining private and protected properties and methods in Javascript, here on the site. However, the current version of Prototype (1.6.0) doesn't have a built-in way to define them through its Class.create() syntax.

I'm curious what the best practices are when developers want to define private and protected properties and methods when using Prototype. Is there a better way than the generic one?


Solution

  • What you can do is using local variables in your constructor function (initialize) for prototype and then creating a closure that will access/expose this variable to your public methods.

    Here's a code example:

    // properties are directly passed to `create` method
    var Person = Class.create({
       initialize: function(name) {
          // Protected variables
          var _myProtectedMember = 'just a test';
    
          this.getProtectedMember = function() {
             return _myProtectedMember;
          }
    
          this.name = name;
       },
       say: function(message) {
          return this.name + ': ' + message + this.getProtectedMember();
       }
    });
    

    Here's Douglas crockford theory on the subject.

    http://www.crockford.com/javascript/private.html