在过去的几天里,我一直在研究一种在 MooTools 类中拥有私有或受保护属性的方法。各种文章(即 Sean McArthur 的在 MooTools 类中获取私有变量)提供了一种用于 MooTools 已弃用版本的方法,但我无法找到 MooTools 1.3+ 的工作方法。
今天,在玩了几个小时的代码之后,我想我已经创建了一个合适的解决方案。我说“想想”,因为我真的没有作为程序员的经验。我希望这里的社区可以检查我的代码并告诉我它是否真的是一个有效的解决方案,或者一个 hackjob 仿真。
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会引用实例对象!所以,我很烂。不过,任何想法都会很棒!