(function(){})(jQuery)与$.fn的使用

(function(){})(jQuery)

(function($){})(jQuery)常在开发插件时使用,与jQuery(function(){})不同,(function($){})(jQuery)相当于一个匿名函数,在DOM节点加载完成时就已开始执行,所以在效率上要比jQuery(function(){})高。

但是值得注意的是因为是在页面加载完成之前执行,需要注意在使用DOM节点时要保证html里面包含节点。

$.fn.method()

什么时prototype?

每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。例如:

function People(name)
{
  this.name=name;
  //对象方法
  this.Introduce=function(){
    alert("My name is "+this.name);
  }
}
//类方法
People.Run=function(){
  alert("I can run");
}
//原型方法
People.prototype.IntroduceChinese=function(){
  alert("我的名字是"+this.name);
}

//测试
var p1=new People("Windking");

p1.Introduce();

People.Run();

p1.IntroduceChinese();

轩脉刃de刀光剑影

$.fn.method()是什么?

$.fn.method()是把方法扩展到了对象的prototype上,所以实例化一个jQuery对象的时候,它就具有了这些方法。这就是我们常在使用js插件时为什么可以通过选择器调用一个陌生的jquery方法,例如下方的$('.test').testsetting({} 方法

示例

下面示例实现了一个类似设置主题的功能

test.js

(function($){
    $.fn.testsetting = function(options){
        var setting = $.extend({
           settingCss: {
                background : "green",
                width : '200px',
                height : '300px'
           },
           dtCss :{
            width:'30px',
            height: '100px',
            background : "red"
           },
           theme:'testbody'
        },options);

        return this.each(function(){
            var target = $(this);
            var testdiv = $('#testdiv');
            var dt = $(testdiv).find('div');
            dt.css(setting.dtCss);
            target.addClass(setting.theme);
            testdiv.css(setting.settingCss);
            $(dt).mouseenter(function(){
                if($(testdiv).hasClass('divbg')){
                    return
                }
                $(testdiv).addClass('divbg')
            });
            $(Window).click(function (e) {
		if ($(e.target).closest(dt).length) {
			return;
		}
		$(testdiv).removeClass("divbg");
	      });
        });
    }

})(jQuery)

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
     <!--jQuery-->
     <script src="https://blog-static.cnblogs.com/files/PoetryAndYou/jquery.min.js"></script>
     <link rel="stylesheet" href="test.css">
     <script src="test.js"></script>  
</head>
<body>
    <div class = "test">
        <div id = "testdiv">
            <div>1</div>
            <div>2</div>
            <div>3</div>
        </div>
    </div>
</body>
<script>
    $('.test').testsetting(
        {
            settingCss: {
                background : "cornflowerblue",
                width : '200px',
                height : '300px'
           },
           dtCss :{
            width:'30px',
            background : "red",
            height: '100px'
           },
           theme:'testbody'
        }
    );
</script>
</html>

test.css

.testbody{
    background-color: aqua;
    width: 300px;
}

.testbody01{
    background-color: red;
    width: 300px;
}

.divbg{
    background-color: cadetblue!important;
}
posted @ 2021-02-07 17:33  PoetryAndYou  阅读(190)  评论(0编辑  收藏  举报