jQuery1.5の新しい特徴subclass-jQueryプラグインメカニズムの救済


感覚jQuery 1.5最大の変更は2つあり,jQueryサブクラスと非同期キューであり,本稿ではjQueryサブクラスのみについて述べる.
まず、なぜこの機能を発売したのか、基本的にゼロのOO機能を強化したのかを理解しなければなりません.いいえ、次のソースコードからクラスをカスタマイズするのではないことを知っています.しかし、これも愚かな問題です.この方法はsubclassではなくClassと呼ばれています.
subclass: function(){
    function jQuerySubclass( selector, context ) {
        return new jQuerySubclass.fn.init( selector, context );
    }
    jQuerySubclass.superclass = this;
    jQuerySubclass.fn = jQuerySubclass.prototype = this();
    jQuerySubclass.fn.constructor = jQuerySubclass;
    jQuerySubclass.subclass = this.subclass;
    jQuerySubclass.fn.init = function init( selector, context ) {
        if (context && context instanceof jQuery && !(context instanceof jQuerySubclass)){
            context = jQuerySubclass(context);
        }
        return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass );
    };
    jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
    var rootjQuerySubclass = jQuerySubclass(document);
    return jQuerySubclass;
},
本当の意味は
プラグインのメカニズムを改善します.
jQueryのプラグインは開発が容易で、そのプロトタイプチェーンに勝手にメソッドを追加することを「プラグイン」と呼ぶため、jQueryのプラグインが多く、ゴミプラグインも多く、更新を停止することでゴミになることも多い.
jQuery.fn.garbage = function(){
    alert("      !")
}
もちろんこれは最も理想的な状況で、プラグインはこんなに簡単です(1つの関数で1つのプラグインを計算するのも多いようです).例えば、プラグインを開発し、同僚も同じ名前のプラグインを開発した場合、問題が発生します.また、
(function($){//   
     $.fn.extend({
             a:function(){//     
                this.b()
           },
            b:function(){}//    
       })
 })(jQuery);
 
  (function(){//   
     $.fn.extend({
            c:function(){//     
                this.b()
           },
            b:function(){}//           
      })
})(jQuery);
の場合、この2つのプラグインの混用に問題があります.プラグイン1のbとプラグイン2のbは1つのものではないかもしれません.この確率はまだ大きいです.プラグイン1はアメリカの菜鳥開発かもしれません.プラグイン2はドイツの菜鳥開発です.そして、外国人は彼らのプラグインをjQuery公式サイトのプラグイン展示エリアに置くのが好きです.国内の怠け者兼菜鳥は雷を踏みやすい.
プラグインの混乱の災いjQueryの流行がますます深刻になるにつれて、jQueryは学びやすくて使いやすくて、会社の先端は人手が足りないので、勝手に楽屋をつかめばいいです.そこでフロントエンドも中国のビル市のようにバブルが発生し、1ページにN個のプラグインを引用し、フルスクリーンのセレクタは、メンテナンスコストが高く、ほぼ不可能である.結局、問題はjQueryとjQueryを汚染していることです.fnという2つのオブジェクトは、以前みんながグローバルな役割ドメインに糞をするのが好きだったように.全局の作用域は公衆便所で、そこに行くのは避けられないが、私たちはサブクラスでjQuery,jQueryを移すことができる.fnの負担.jQuery 1.5では、プラグインをこのように書くべきです.
var MyjQuery = jQuery.subclass();
MyjQuery.fn.writeHello = function(){ this.text('Hello World'); };
MyjQuery('p').writeHello();
MyjQueryはjQueryのサブクラスであるため、そのすべての能力を持ち、チェーン操作と同様に問題ありません.
MyjQuery('div').css('border', '1px red solid').writeHello();
私たちはまたjQueryの元の方法を修正することができて、いくつかの隠れたバグのためにソースコードを変更する必要はありません:
MyjQuery.fn.text = function(val) {
  var orig = jQuery.fn.text;
  if(typeof val === "string") {
    return orig.call(this, "!!"+ val +"!!");
  } else {
    return orig.apply(this, arguments);
  }
};
MyjQuery('.aaa').text("text");
MyjQuery('.aaa').text();    //!!text!!
  
//   jQuery  
jQuery('.aaa).text('text'); //text
もちろんこれも1つの問題をもたらして、プラグインはすべて新しいネーミング空間に縛られて、再びグローバルな役割ドメインの上で糞をします......一歩進んだ救いはそのパッケージのロードメカニズムが出るのを待つようです.そのためプラグインを少なくし、自身のjavascript(jQuery以外)能力を高めることが基本です.