作者 主題: 請問有關jQuery 自製plugin的變數問題?  (閱讀 3013 次)

0 會員 與 1 訪客 正在閱讀本文。

guard

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
請教有實做過jquery plugin的先進,正在練習如何做一個物件,但是在實做上 我發現他的變數竟然變成全域變數
,在其他語言的觀念中,會視aa1跟aa2為兩個獨立的物件 ,但是在下面的操作中,兩者的變數操作卻相互影響,
不曉得是不是小弟的寫法有誤?

jQuery("#aa1").hilight({foreground: 'green2xx'});
jQuery("#aa2").hilight({foreground: 'zzzzzz'});


   (function($) {
     $.fn.hilight = function(options) {

    
     $.fn.hilight.defaults = {
       foreground: 'red',
       background: 'yellow'
     };
       // build main options before element iteration
       var opts = $.extend({}, $.fn.hilight.defaults, options);
       alert( opts.foreground);
      
       $.fn.hilight.defaults = opts;

      
       // iterate and reformat each matched element

     };

     $.fn.hilight.format = function(txt) {
       alert(this.defaults.foreground);
       this.defaults.foreground  = this.defaults.foreground + txt;
     };

   })(jQuery);

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 請問有關jQuery 自製plugin的變數問題?
« 回覆 #1 於: 2011-05-17 12:02 »
代碼: [選擇]
......    
    $.fn.hilight.defaults = opts;
......    
  $.fn.hilight.format = function(txt) {
    alert(this.defaults.foreground);
    this.defaults.foreground  = this.defaults.foreground + txt;
  };
......

如果你是要用format來修改defaults,那$.fn.hilight.defaults = opts;就破壞了規則?另外,接下來的程式使用opts變數就應該可以達到你的目的,而且變數只在函數執行中有作用,$.fn.hilight.defaults的影響則是持續的。
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.