jQuery.extend()方法 + jQuery.fn.extend()方法 + jQuery源码分析(初体验)

162 阅读1分钟

$.extend()方法

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

1644482112(1).jpg

<script src="./jquery-1.12.4.js"></script>
    <script>
        var car1={
            color:{name:'水晶白',price:'1000W'}
        }
        var car2={
            carname:'保时捷',
            color:{name:'帅酷黑'}
        }
        console.log( $.extend(car1,car2) );
        ==> car1 = {
            carname:'保时捷',
            color:{name:'帅酷黑'}
            }
            
        console.log( $.extend(true,car1,car2) );
        ==> car1 = {
            carname:'保时捷',
            color:{name:'帅酷黑',price:'1000W'}
            }
    </script>

$.fn.extend()方法

$.fn.extend() 函数为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法)。
提示: jQuery.fn是jQuery的原型对象,其extend()方法用于为jQuery的原型添加新的属性和方法。这些方法可以在jQuery实例对象上调用。
语法

$.fn.extend(object)

<button>全选</button>
    <h1>爱好</h1>
    睡觉: <input type="checkbox" name="" id="">
    游戏: <input type="checkbox" name="" id="">
    熬夜: <input type="checkbox" name="" id="">
    <script src="./jquery-1.12.4.js"></script>
    <script>
        $.fn.extend({
            checked: function () {
                this.each(function (i, e) {
                    e.checked = true;
                })
            },
            unchecked: function () {
                this.each(function (i, e) {
                    e.checked = false;
                })
            }
        })
        let flag = true;
        $('button').click(function () {
            if (flag) {
                $('input').checked();
                $('button').html('取消全选')
            } else {
                $('input').unchecked();
                $('button').html('全选')
            }
            flag = !flag;
        })
    </script>

jQuery源码分析(初体验)

<style>
        .div1{
            width: 100px;
            height: 100px;
            background: pink;
        }
        .red{
            background: red;
        }
    </style>
    
<button>点击切换</button>
    <div class="div1"></div>
    <script src="./kw47jquery.js"></script>
    <script>
        document.querySelector('button').onclick=function(){
            $('.div1').toggle()
        }
        /* $('.div1').css('background','red'); */
        // $('.div1').hide();
        // $('.div1').show()
        $('.div1').addClass('red');
        $('.div1').removeClass('red');
        // let div=document.querySelector('.div1');
        // console.log(div.class);
        $('.div1').click(function(){
            alert('1')
        })
    </script>
    
 /* kw47jquery.js */  
(function () {
    function $(element) {
        let ele = document.querySelector(element);
        ele.css = function (key, value) {
            this.style[key] = value
        }
        ele.show = function () {
            this.style.display = 'block'
        }
        ele.hide = function () {
            this.style.display = 'none'
        }
        ele.toggle = function () {
            if (this.style.display == 'block') {
                this.hide()
            } else {
                this.show()
            }
        }
        ele.addClass = function (className) {
            this.className = this.className + ' ' + className
        }
        ele.removeClass = function (className) {
            this.className = this.className.replace(className, '')
        }
        ele.click = function (callback) {
            this.onclick = callback;
        }
        return ele
    }
    /* 把局部的方法$ 挂载到window上变成全局的就可以使用了 */
    window.$ = $;
})();