私はJavaScriptの中でOOPをかなり深く掘り下げてきました。そして、ああ、混乱するところです。しかし、私はトンネルの終わりに光を見ることができるようになったので、自分のコードでより簡潔になることを学んだことに疑問を持ち始めています。私はこのプラグインは、私の「実験場」だから、javascriptオブジェクトを 'data-'を介して要素に貼り付けるか、要素に直接貼り付けますか?
;(function($, window, document, undefined) {
"use strict";
$.fn.myPlugin = function(opts) {
var options = $.extend({}, { color : 'blue', normal : 'black' }, opts);
return this.each(function(id, elem) {
if (!elem.parent) // Base parent object
elem.parent = Object.create({
settings : options,
show : function (that) { $(that).css("color", this.settings.color); },
noShow : function (that) { $(that).css("color", this.settings.normal); },
log : function (that) { console.log(that ? that : this); }
});
$(elem).children('span').each(function(idx, elmx) {
if (!elmx.child) // Child obj w/ delegation from parent
elmx.child = Object.create(elem.parent);
$(elmx).hover(
function() {
elmx.child.log();
elmx.child.show(elmx);
}, function() {
elmx.child.noShow(elmx);
});
});
});
};
}(jQuery, window, document));
私が見てきたものすべての作品、linkが、私は反するような方法ですべての私のオブジェクトを添付していますほとんどの人が仕事で両方を行うこのとして動作していますオンライン。私がオブジェクトをelem.parent.OBJECT
とelmx.child.OBJECT
に添付しているところでは、ほとんどの人は$.data(elem, 'parent', OBJECT)
と$.data(elmx, 'child', OBJECT)
です。私のアプローチがより簡潔で、ネームスペースを乱雑にしていないと感じています。私がそれを持っているやり方でやってはいけない理由はありますか?
この2つのオブジェクトアプローチに疑問を持っている人にとって、このプラグインは、私にとってはプロトタイプの継承がどのように機能するかを見るためだけに存在することに注意したいと思います。
代わりに '$ .data'を使うべき理由は、メモリリークを回避し、要素を乱雑にしないからです。 jQueryの '$ .data'は、そのデータを格納するために内部マップを使用し、アクセスするすべての要素に与えられた数字だけなので、要素に実際に直接関連付けられていないため、要素が削除されたときなどはガベージコレクションを妨げません。 – adeneo
@adenoそれは答えではなく、コメントではないようです。私が答えとして投稿しようとしていたものに非常に似ています。 –
さて、私はすでにそれを書いているので、どうしてですか? – adeneo