views:

1197

answers:

2

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?

+1  A: 

There's a discussion here in Prototype's lighthouse that shows that explains why you can't get this effect with Prototype's Class.create.

TML
+1  A: 

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

SleepyCod
Awesome. Thanks. I voted up TML's answer as well, since the link he includes has a full discussion on this topic, and reveals why other (cleaner-looking) implementations don't work.
Eric Nguyen