Частные свойства в классах MooTools 1.3+

Я провел последние пару дней, исследуя способ иметь частные или защищенные свойства в классах MooTools. Различные статьи (например, Шон МакАртур Получение частных переменных в классе MooTools ) предлагают подход для устаревших версий MooTools, но мне не удалось найти рабочий метод для MooTools 1.3+.

Сегодня, после нескольких часов игры с кодом, я думаю , что создал подходящее решение. Я говорю «подумай», потому что на самом деле я не настолько опытен в программировании. Я надеялся, что сообщество здесь сможет проверить мой код и сказать, действительно ли это правильное решение или эмуляция взлома.

var TestObj = (function() {

 var _privateStaticFunction = function() { }

 return new Class({

  /* closure */
  _privates: (function() {

   return function(key, val) {

    if (typeof(this._data) == 'undefined') this._data = {};

    /* if no key specified, return */
    if (typeof(key) == 'undefined') return;

    /* if no value specified, return _data[key] */
    else if (typeof(val) == 'undefined') {
      if (typeof(this._data[key]) != 'undefined') return this._data[key];
      else return;
    }

    /* if second argument, set _data[key] = value */
    else this._data[key] = val;

   }

  /* tell mootools to hide function */
  })().protect(),

  initialize: function() {},

  get: function(val) { return this._privates(val); },
  set: function(key,val) { this._privates(key,val); }

 })

})();


obj1 = new TestObj();
obj2 = new TestObj();

obj1.set('theseShoes','rule');
obj2.set('theseShoes','suck');

obj1.get('theseShoes') // rule
obj2.get('theseShoes') // suck
obj1._privates('theseShoes') // Error: The method "_privates" cannot be called
obj1._privates._data // undefined
obj1._privates.$constructor._data // undefined

Я очень ценю любые советы! Спасибо всем!

РЕДАКТИРОВАТЬ : Ну, это неловко. Я забыл проверить очевидное, obj1._data. Я не думал, что this будет ссылаться на объект экземпляра! Итак, я отстой. Тем не менее, любые идеи будут потрясающими!

5
задан moon prism power 23 May 2011 в 23:23
поделиться