使用 jQuery.extend 覆盖函数的原因可能是什么?

2024-02-22

我正在寻找扩展引导插件的正确方法,并找到了这个答案:https://stackoverflow.com/a/12689534/1276032 https://stackoverflow.com/a/12689534/1276032

让我烦恼的是最后一部分——初始化覆盖。复制代码如下:

// override the old initialization with the new constructor
$.fn.modal = $.extend(function(option) {

    var args = $.makeArray(arguments),
        option = args.shift();

    return this.each(function() {

        var $this = $(this);
        var data = $this.data('modal'),
            options = $.extend({}, _super.defaults, $this.data(), typeof option == 'object' && option);

        if ( !data ) {
            $this.data('modal', (data = new Modal(this, options)));
        }
        if (typeof option == 'string') {
            data[option].apply( data, args );
        }
        else if ( options.show ) {
            data.show.apply( data, args );
        }
    });

}, $.fn.modal);

我不明白为什么在这种情况下使用 $.extend - 它是否有一些我看不到的效果?如果我执行这段代码:

var f1 = function(){console.log(1);};
var f2 = function(){console.log(2);};
var f2 = $.extend(f1,f2);
f2();

那么只有 1 被打印到控制台,并且 f1 等于 f2。所以看起来简单的分配就可以了,

$.fn.modal = function(option) {...}

但也许我错过了一些东西......


你需要改变这个:

$.fn.modal = $.extend(function(option) {
    // your code ...
}, $.fn.modal);

为了这:

$.extend($.fn.modal, function(option) {
    // your code ...
});

TL;DR

$.extend(a, b)复制内容b on a (修改其内容),如果有重复,则属性b遗迹。此外,它返回的值a.

所以,如果你有这个:

hello    = { unique_on_hello: 'hola',  message: 'hello message' }
world    = { unique_on_world: 'mundo', message: 'WORLD MESSAGE' }
response = $.extend(hello, world)

每一项的值将是:

hello    // {unique_on_hello: "hola", message: "WORLD MESSAGE", unique_on_world: "mundo"}
world    // {unique_on_world: "mundo", message: "WORLD MESSAGE"}
response // {unique_on_hello: "hola", message: "WORLD MESSAGE", unique_on_world: "mundo"}

所以,如果你这样做f2 = $.extend(f1,f2);是相同的:

$.extend(f1, f2) // Copy properties of f2 to f1
f2 = f1

Source: https://api.jquery.com/jquery.extend/ https://api.jquery.com/jquery.extend/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jQuery.extend 覆盖函数的原因可能是什么? 的相关文章

随机推荐

  • Spirit-Qi:如何编写非终结符解析器?

    我想写一个可以使用的解析器 作为 qi 扩展 通过my parser p1 p2 where p1 p2 是 qi 解析器表达式 其实我想实现一个best match解析器的工作方式类似于 qi 替代方案 但不选择第一个匹配规则 而是选择
  • 学习 jQuery 的 CSS 选择器

    我想学习 jQuery 在我看来 jQuery 只需选择你想要的元素 然后对其执行一些操作 但选择方式与CSS选择器很接近 而且我不熟悉CSS css选择器 因为我一直认为它相当不系统 我找不到任何规则 我对 CSS 选择器的了解如下 id
  • 在 Chrome 中,触发 $(document).ready() 时不会加载 资源。为什么?

    在 Firefox 和 IE 中 SVG SVG 文档在以下情况下检索 document ready 叫做 在 Chrome 中 getSVGDocument当以下情况时返回 null document ready 叫做 虽然似乎在大约 7
  • Htaccess 重写删除尾部斜杠

    Htaccess 以某种方式自动删除 url 末尾的所有尾部斜杠并只保留一个 例如http localhost api param1 http localhost api param1 变成http localhost api param1
  • 要安装多少个 wiki 实例?

    我被要求安装 Mediawiki 来保存公司内部网的文档 此外 我被要求安装several实例 每个贡献组一个 非技术用户获得一个 开发人员获得一个 管理人员获得一个 等等 我们的想法是为每个组提供单独的网络空间 有没有一种方法可以在一个实
  • 如何缓存从 Ajax 调用接收到的数据?

    我想缓存从服务器接收的数据 以便执行最少数量的 PHP MySQL 指令 我知道缓存选项是自动为 ajax 设置的 但是 每次调用 ajax 时我都会看到 MySQL 指令 即使 postdata 与之前的调用中的相同 我错过了什么吗 缓存
  • Code::Blocks 出现无效工具链错误

    Hello Debug uses an invalid compiler Probably the toolchain path within the compiler options is not setup correctly Skip
  • 等待句柄会释放线程获取的锁吗?

    当我有如下所示的代码时 我的问题是调用 signal WaitOne 的线程是否释放已获取的锁以供另一个线程获取锁 我认为这是一个微不足道的问题 但我尝试寻找类似的东西 却一无所获 如果有人可以阐明这一点并修改我的帖子 标题 使其更容易被将
  • 从 git 提交生成 PDF 日志

    我知道我可以使用 git log 以各种方式查看以前的提交 但我想知道这里是否有人可以推荐一些用于从 git 提交创建 PDF 或 HTML 日志的好工具 我希望能够生成类似于 Github 提交日志风格但具有不同信息的内容 如果人们对生成
  • 在数基之间转换数字

    我正在开发一个在数字基数之间进行转换的程序 例如八进制是 8 十进制是 10 字母A to Z可以被视为基数 26 我想将 A 转换为0 Z转换为25 AA 转换为27 BA 转换为53 在开始编码之前 我会在纸上进行编码 以便我了解整个过
  • 为什么 date() 不能正确地将 YYMMDDHHMM 转换为 MySQL 可接受的日期格式?

    我想要一个像这样的字符串 1511030830 YYMMDDHHMM 并创建一个 MySQL 时间戳 如下所示 2015 11 03 08 30 00 但是 当尝试这样做时 它将不起作用 string 1511030830 date dat
  • 以编程方式启动时 Appium 不会初始化驱动程序

    我正在使用 Java 和 Selenium 通过命令行初始化 Appium 以便在 Android chrome 浏览器上运行测试 然而 该过程运行无限时间 并且代码来自 DesiredCapabilities 该行没有被执行 代码 Pro
  • 列出给定类的所有内部类 - Python

    给定一个类 我如何列出它的所有inner课程 class Car some var var class Engine some other var var2 class Body another var var3 现在给出Car我希望能够列
  • Next JS在arcgis地图上的多个坐标上显示信息窗口

    下面是我的下一个 JS 代码 它显示了一个简单的 ArcGIS 地图 其中包含特定坐标上的点或标记 谁能告诉我如何在地图上显示点的弹出 信息窗口 例如我单击任意点 它将在其上打开相应的弹出窗口 import NavBar from comp
  • 从 Swift 初始化器调用方法

    假设我在 Swift 中有以下类 有明显的问题 class MyClass let myProperty String init super init self setupMyProperty func setupMyProperty my
  • 如何在 AWS Cognito 中编辑尝试更改密码的限制?

    我已经实现了更改密码功能 现在我想测试一下 但我面临着尝试的极限 我应该做什么来防止这个错误 已超出尝试次数限制 请稍后再试 我是 Cognito 团队的成员 这是不可配置的 我们确实有保护机制来防止用户滥用忘记密码的 API 这可能就是您
  • Keras 中的 add_loss 函数的用途是什么?

    目前 我偶然发现了变分自动编码器 并尝试使用 keras 让它们在 MNIST 上工作 我找到了一个教程github https github com keras team keras blob master examples variat
  • 如何按周添加两个日期中的日期?

    I have a table in which rows have dates as monday dates of the weeks Some consecutive rows may not have consecutive week
  • 如何在 F# 模块中定义可选参数?

    我正在尝试用 F 重写一个小型 C 库 但遇到了错误 我试图为模块中的方法定义可选参数 但编译器说 可选参数仅允许在类型成员上使用 我查过为什么你不能在松散的函数中使用它们 https stackoverflow com questions
  • 使用 jQuery.extend 覆盖函数的原因可能是什么?

    我正在寻找扩展引导插件的正确方法 并找到了这个答案 https stackoverflow com a 12689534 1276032 https stackoverflow com a 12689534 1276032 让我烦恼的是最后