jQuery.extend和jQuery.fn.extend的区别是什么?

ccrfmcuu  于 2022-12-29  发布在  jQuery
关注(0)|答案(5)|浏览(160)

我正在尝试理解jquery插件的语法,因为我想把两个插件合并成一个。这个blinker也需要能够停止de interval或者运行很多次。
不管怎样,这个语法和

jQuery.fn.extend({
    everyTime: function(interval, label, fn, times) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, times);
        });
    },
    oneTime: function(interval, label, fn) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, 1);
        });
    },

这个

$.fn.blink = function(options)
    {

因为看起来第一个(不带=)是一次设置多个方法的方法,对吗?还有,当我在这里的时候,为什么要在jquery对象中添加元素和一些逻辑?

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(this来自计时器插件)

bhmjp9jg

bhmjp9jg1#

extend用于为任何对象扩展额外的函数,但jQuery.fn.extend用于扩展jQuery.fn对象,实际上它一次添加了多个插件函数(而不是分别为每个函数赋值)。

jQuery.扩展

var obj = { x: function() {} }

jQuery.extend(obj, { y: function() {} });

// now obj is an object with functions x and y

jQuery.fn.扩展

jQuery.fn.extend( {
        x: function() {},
        y: function() {}
});

// creates 2 plugin functions (x and y)
czfnxgou

czfnxgou2#

jQuery.extend({
    abc: function(){
        alert('abc');
    }
});

用法:$.abc()。(不需要像$.ajax()这样的选择器。)

jQuery.fn.extend({
    xyz: function(){
        alert('xyz');
    }
});

用法:$('.selector').xyz()。(需要选择器,如$('#button').click()。)
它主要用于实现$.fn.each()

rpppsulh

rpppsulh3#

jQuery. extend和jQuery. fn. extend的区别是什么?
实际上,除了它们的基引用之外,没有其他的引用。在jQuery源代码中,您可以看到:

jQuery.extend = jQuery.fn.extend = function() { … };

那么它是如何工作的呢?documentation读取:
将两个或多个对象的内容合并到第一个对象中。
它只是一个复制属性的for循环,加上一个标记来递归嵌套对象。
如果只为$.extend()提供了一个参数,则意味着省略了目标参数

// then the following will happen:
 target = this;

因此,如果在jQuery本身上调用函数(没有显式目标),它将扩展jQuery名称空间;如果在jQuery.fn上调用函数(没有显式目标),它将扩展所有(插件)方法所在的jQuery原型对象。

fiei3ece

fiei3ece4#

This blog post有很好的描述:

$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();

$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();

引言:

  • 一般来说,应该为函数扩展jQuery对象,为方法扩展jQuery.fn对象,函数与方法相反,不能直接从DOM访问。*
ne5o7dgx

ne5o7dgx5#

$.fn.something= function{};

指向jQuery.prototype,并允许通过“this”访问dom元素。现在你可以使用$(selector).something();,所以它像$(selector).css();一样作为插件函数工作

$.something = function{};

添加一个属性或函数到jQuery对象本身,而u不能使用“this”进行dom访问。现在u可以使用它作为$.something();它作为$.trim()的实用函数工作
但是

$.fn.extend({function1(), function2()}) and  $.extend({function1(), function2()})

允许同时添加多个函数。2当我们提供多个对象时,它们也可以用来合并两个对象。

相关问题