var Test = new Class({ Implements:[Options], 'private initialize':function(options, _private){ this.setOptions(options); _private.test = 'Hello, '+ (options.name || 'world!'); }, 'private say':function(i_can_call_this_as_i_want){ alert(i_can_call_this_as_i_want.test); }, a_normal_method:function(){ alert("I don't use privates"); } }); var kenta = new Test({name:'kenta'}); kenta.say(); kenta.a_normal_method(); var test2 = new Test({}); test2.say(); //when done test2['~'](); kenta['~']();
<script type="text/javascript"> /* --- name: Class.PatternMutators description: Pattern-Based Mutation for MooTools 1.3 license: MIT-style license. copyright: Mark Obcena requires: Class provides: [Class.defineMutator, Class.define] ... */ (function(){ var matchers = []; var lookup = function(key){ var i = matchers.length; while (i--){ var matcher = matchers[i], match = key.match(matcher); if (match) return ['$mutator:' + matcher, match.slice(1)]; } return null; }; Class.defineMutator = function(key, fn){ if (typeOf(key) == 'regexp'){ matchers.push(key); key = '$mutator:' + key; var _fn = fn; fn = function(values){ return _fn.apply(this, values); }; } Class.Mutators[key] = fn; return this; }; var define = Class.prototype.implement; Class.implement('define', define); var implement = Class.prototype.implement = function(key, value, retain){ var mutator = lookup(key); if (mutator){ key = mutator.shift(); mutator[0].unshift(value); value = mutator.shift(); } return define.call(this, key, value, retain); }.overloadSetter(); // Default Mutators Class.defineMutator(/^protected\s(\w+)/, function(fn, name){ this.define(name, fn.protect()); }); Class.defineMutator(/^linked\s(\w+)/, function(value, name){ this.prototype[name] = value; }); Class.defineMutator(/^static\s(\w+)/, function(fn, name){ this.extend(name, fn); }); // Reimplement "implement" in all classes.. for (var i in window){ try { var klass = window[i]; if (klass instanceof Function && typeOf(klass) == 'class'){ klass.implement = implement; klass.define = define; } } catch(e){} } })(); </script> <script type="text/javascript"> /* --- name: kenta.Private description: Private mootator for MooTools 1.3.x license: MIT-style license. copyright: Carlesso Cristian http://mykenta.blogspot.com requires: Class.PatternMutators provides: private pattern mutator, '~' cleanup method. ... */ (function(){ var Private={}; Class.defineMutator(/^private\s(.*)/,function(fn, name){ var getPrivate = function(bind){ var uid= $uid(bind); return Private[uid] || (Private[uid] = {}); }; this.define('~', function() { var uid = $uid(this); delete Private[uid]; }); this.define(name, function(){ var priv = getPrivate(this); var args = Array.from(arguments); args.push(priv); var res = fn.apply(this, args); return res; }); }); })(); </script>