2013-02-11 100 views
2

我從另一個JS文件創建有用東西的實例 有點麻煩,我想更改 實例的屬性並使用這些方法。或者不管你有什麼建議,如果這不是 可能。這擴大了,這個構造讓我感到困惑。在javascript中訪問擴展對象

(function($) { 

$.extend({ 
    usefulThings: new function() { 
     this.defaults = { 
      prop_path:'/la/lala', 
      //OTHER STUFF 
     }; 
     this.construct = function(options) { 
      return this.each(function() { 
       var setting; 
       this.settings = {}; 
       settings = $.extend(this.settings, $.usefulThings.defaults, options); 
       $this = $(this); 

       //OTHER STUFF 
       $.data(this, "usefulThings",settings); 
       // FIRST METHOD CALL 
       //OTHER STUFF 
      }); 
     }; 
     //SOME METHODS 
    } 
}); 
$.fn.extend({ 
    usefulThings: $.usefulThings.construct 
}); 
})(jQuery);  

我見過usefulThings從腳本塊稱爲像這樣:

$("#myDivName").usefulThings({ 
    prop_path: '/la/lala' //these seems to get overwritten in the above 
}); 

回答

0

首先,看看MDN's introduction to the this keyword。並在jQuery文檔.each

接下來,檢查出how does jquery chaining work?瞭解構造方法。

然後,你應該注意到在這種情況下使用new關鍵字是絕對不合適的。表達式應該用一個簡單的對象文字替換:

{ 
    defaults: { 
     prop_path:'/la/lala', 
     // … 
    }, 
    construct: function(options) { 
     … 
    }, 
    //SOME METHODS 
} 

現在,jQuery.extend。從文檔相關的句子是

如果只有一個參數提供給$.extend(),這意味着target參數省略。在這種情況下,jQuery對象本身被假定爲目標。通過這樣做,您可以將新函數添加到jQuery命名空間。這對希望向JQuery添加新方法的插件作者非常有用。

而且它是$.fn.extend相同的(這實際上是=== $.extend),它擴展了jQuery.fn對象是用於jQuery的原型對象的快捷方式。

+0

我研究了你所寫的所有內容,而且內容非常豐富。我學到了一些東西。最終,我的問題是當我試圖調用它時,包含usefulThings的文件尚未加載。我把它包裝在window.onload = function(){$(「#myDivName」)。usefulThings({prop_path:'/ la/lala'});}它工作。我覺得有人告訴我要清除緩存。感覺現在是真正的新手。 – 2013-02-11 20:44:53

+0

...並且謝謝 – 2013-02-11 21:29:10