2013-02-11 99 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