2

我在从另一个 JS 文件创建有用事物的实例时遇到了一些麻烦,我想更改实例的属性并使用这些方法。或者如果这是不可能的,你建议什么。这扩展了,这个结构让我感到困惑。

(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);      

我见过从脚本块调用的有用事物,如下所示:

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

1 回答 1

0

首先,看一下MDN 对this关键字的介绍。在 jQuery 文档中为.each.

接下来,看看jquery 链接是如何工作的?了解构造方法。

然后,您应该注意到new在这种情况下使用关键字是绝对不合适的。表达式应替换为简单的对象字面量:

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

现在,jQuery.extend. 文档中的相关句子是

如果仅向 提供一个参数$.extend(),则表示该target参数被省略。在这种情况下,jQuery对象本身被假定为目标。通过这样做,您可以将新功能添加到jQuery命名空间。这对于希望向 JQuery 添加新方法的插件作者很有用。

对于$.fn.extend(实际上是=== $.extend)也是如此,它扩展了jQuery.fn作为 jQuery 原型对象的快捷方式的对象。

于 2013-02-11T19:07:31.710 回答