• jQuery.extend()


    使用jquery的$.extend()之前突然想到如何查看jquery的版本

    $.fn.jquery

    转入正题,在没有研究jquery源码之前,都不知道这个方法的使用,接触过后感觉这东西还可以,在此做个note

    jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。

    注意:

    1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
    2. 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。

    定义和用法

    $.extend( target [, object1 ] [, objectN ] )

    指示是否深度合并

    $.extend( [deep ], target, object1 [, objectN ] )

    deep :可选。 Boolean类型 指示是否深度合并对象,默认为false。如果该值为true,且多个对象的某个同名属性也都是对象,则该"属性对象"的属性也将进行合并。

    target : Object类型 目标对象,其他对象的成员属性将被附加到该对象上。

    object1:可选。 Object类型 第一个被合并的对象

    objectN:可选。 Object类型 第N个被合并的对象。

    1.基本的用法:

    1 var option1 = {
    2     max: 100,
    3     min: 20
    4 }
    5 var option2 = {
    6     flag: true,
    7     disable: false
    8 }
    9 var objconfig = $.extend(option1, option2);

    objconfig的值为合并后的对象 {max: 100, min: 20, flag: true, disable: false}

    这种用法的缺点是什么呢?改变了option1 !!!

    然后我们如果不需要改变option1可以把target设置为{},目标对象为新的{},而不是option1,到时option1将不会不改边,把option1和option2合并成一个对象

    var option1 = {
        max: 100,
        min: 20
    }
    var option2 = {
        flag: true,
        disable: false
    }
    var objconfig = $.extend({}, option1, option2);

    2.合并的对象之间含有重复的属性

    var option1 = {
        max: 100,
        min: 20
    }
    var option2 = {
        flag: true,
        disable: false,
        min: 100
    }
    var objconfig = $.extend({}, option1, option2);

    objconfig的值为{max: 100, min: 100, flag: true, disable: false}

    也就是合并对象有重复的属性值时,后面的对象的相同属性值会覆盖前面的。

    3.合并的对象含有子对象

    var option1 = {
        max: 100,
        min: 20,
        user: {
            name: 'tony',
            age: 18
        }
    }
    var option2 = {
        flag: true,
        disable: false,
        min: 100,
        user: {
            name: 'anny',
            job: 'student'
        }
    }
    var objconfig = $.extend({}, option1, option2);

    看如下结果

    后面的user覆盖了前面的user

    这个时候就涉及到深拷贝了,需要把第一个参数deep设置为true

    var objconfig = $.extend(true, {}, option1, option2);

    深拷贝对象的子对象的属性也合并拷贝了,但是子对象的属性值依然是后面的覆盖前面的

    4.此方法可以给jquery添加新的函数

    $.extend(
        {
            min: function(a, b) { return a < b ? a : b; },
            max: function(a, b) { return a > b ? a : b; }
        }
    )
    console.log($.min(3,5))
    console.log($.max(5,3))

    当extend的对象只有一个时默认是给jquery扩展的,也就是那个对象的属性被附加到jquery身上。

     

     

  • 相关阅读:
    刚体
    Unity3D游戏开发之数据持久化PlayerPrefs的使用
    用AudioSource.PlayClipAtPoint播放音效
    按非降序建立n个元素的线性表
    Unity中的Transform.SetParent()API
    带头结点的两个链表La,Lb,将两个链表合并到La中,并且不破坏Lb的结构
    不带头结点的两个链表合并为一个链表
    二叉树的相关操作(c语言)
    关于ajax请求数据,并将数据赋值给全局变量的一些解决方法
    SummerVocation_Leaning--java动态绑定(多态)
  • 原文地址:https://www.cnblogs.com/freezyh/p/9313658.html
Copyright © 2020-2023  润新知