【发布时间】:2011-05-23 23:09:48
【问题描述】:
过去几天我一直在研究一种在 MooTools 类中具有私有或受保护属性的方法。各种文章(即 Sean McArthur 的 Getting Private Variables in a MooTools Class)提供了一种处理已弃用的 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 会引用实例对象!所以,我很烂。不过,任何想法都会很棒!
【问题讨论】:
-
您不希望您的 getter 和 setter 调用与字典交互的私有函数吗?即
get: function(val) { return getFunc(val); }
标签: javascript oop mootools private-members