javascript - 为什么这两种编写 jQuery 插件的方式是等价的?

标签 javascript jquery jquery-plugins

为什么这两种编写 jQuery 插件的方法是等价的?


第一种方式:

$.fn.myplugin = function () {
    return $(this).each(function() {
        return $(this).bind('click', function () {
            console.log('Hi');
        });
    });
};

第二种方式:

$.fn.myplugin = function () {
    return this.bind('click', function () {
        console.log('Hi2');
    });
};

最佳答案

让我们从一个减少到另一个:

$.fn.myplugin = function () {
    return $(this).each(function() {
        return $(this).bind('click', function () {
            console.log('Hi');
        });
    });
};

当你开始你的函数时 this 是一个 jQuery 对象,所以 $(this) 不会给你买任何东西,它很容易变成:

$.fn.myplugin = function () {
    return this.each(function() {
        return $(this).bind('click', function () {
            console.log('Hi');
        });
    });
};

所以你说的是“对于 jQuery 对象中的每个元素,创建一个 jQuery 对象并将事件绑定(bind)到该对象。”

如果您查看 bind,它会调用 on,它会执行一些逻辑并最终执行以下行:

return this.each( function() {
    jQuery.event.add( this, types, fn, data, selector );
});

这意味着它将把事件应用到那个 jQuery 对象中的每个元素,所以你实际上是在说:

所以你说的是“为 jQuery 对象中的每个元素创建一个 jQuery 对象,然后为该 jQuery 对象中的每个元素将一个事件绑定(bind)到该元素。”

您现在循环了两次,一次是在 N 元素的列表中,然后是 N 次是在 1 个元素的列表中。你实际上可以直接全部绑定(bind):

$.fn.myplugin = function () {
    return this.bind('click', function () {
        console.log('Hi2');
    });
};

当然,这就是最终代码。

关于javascript - 为什么这两种编写 jQuery 插件的方式是等价的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456591/

相关文章:

javascript - 解除 child 点击 Accordion 的绑定(bind)

javascript - 在 Meteor.js 上开始使用 Hammer.js

javascript - 当我的复选框未被选中时,我需要改变我的成功

Jquery Transversing - 在树上移动时遇到问题

jquery - 通过 CSS/jQuery 淡入过渡

Javascript 图片源更改 addEventListener "click"事件

jquery - 简单的图像变化

jquery-plugins - 如何在不重绘图表的情况下刷新jqplot条形图

jquery - SEO 友好的<ul>-基于下拉菜单

jquery - goMap jquery插件重绘 map