私はここ数日、MooToolsクラスにプライベートまたは保護されたプロパティを設定する方法を研究してきました。さまざまな記事(つまり、Sean McArthurのMooToolsクラスでのプライベート変数の取得)は、MooToolsの非推奨バージョンのアプローチを提供していますが、MooTools1.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をチェックするのを忘れました。これがインスタンスオブジェクトを参照するとは思いませんでした。だから、私は吸う。それでも、どんなアイデアも素晴らしいでしょう!