JavaScript|jQuery 自定义插件

JavaScript|jQuery 自定义插件### 前言

以前写过javascript,但都是临时更改,没怎么太研究怎么去写好,怎么去封装,还有JQuery,都是拿来即用,根本就没想过去写插件,主要吧,都是做后端的内容,很少写前端代码。其实写写前端挺有意思的,顺便心血来潮,

整个JQuery插件玩玩:)~

* $.fn.extend 当然这种方式只适用实例范围, 例如:$([class name | tag | et..]).hi(),可以调用

### 无参插件

```

$.fn.extend({

hi: function () {

alert("hello world.");

}

});

```

切记:为了不和其他插件对共享$这个符号的冲突,尽量用下面这个包起来,妥妥的

```

(function($){

})(jQuery);

```

调用

```

$("#id").hi();

```

### 有残参插件,当然这种方式只适用实例范围, 例如:$([class name | tag | et..]).hi(),可以调用

```

$.fn.extend({

hi: function (options) {

var defaults={

background-color:'red'

};

var opts = $.extend(defaults,options);//合并两个对象为一个,类似于java的copyProperties(original, target)

$(this).css("background-color",opts.background);

}

});

```

切记:为了不和其他插件对共享$这个符号的冲突,尽量用下面这个包起来,妥妥的

```

(function($){

})(jQuery);

```

调用

```

$("#id").hi({"background": "red"});

```

### jQuery的链式调用

大家都知道,也都在使用jQuery的链式调用,很优雅,那我们自己的插件可以这样调用吗?

能不能,我们来做个实验,直接执行如下:

```

$("#id").hi({"background": "red"}).html();

```

不好意思,你会看到令人厌烦的异常

```

Uncaught TypeError: Cannot read property 'html' of undefined at <anonymous>:1:46

```

也就是说,我们自己的插件打破了jQuery的链式传递,怎么办呢?其实很简单,在函数最后添加如下:

```

return this.each(function() {

// Using return allows for chainability

});

```

### 最后完整代码

```

(function($){

$.fn.extend({

hi: function (options) {

var defaults={};

var opts = $.extend(defaults,options);

console.log(opts);

$(this).css("background-color", opts.backgroundcolor);

return this.each(function() {

// Using return allows for chainability

});

}

});

})(jQuery);

```

### 注意:如果你直接 $.hi() 来调用,会抛出异常

```

Uncaught TypeError: $.hi is not a functionx at <anonymous>:1:3

```

这也证实了hi方法只是赋予了选择器的实例上,那么我们想给$(jQuery)对象赋予自定义功能,该如何实现呢?

###jQuery类级别的自定义插件,也可以理解为静态方法,工具类。

跟之前比较类似,如下:

```

(function($){

$.extend({

hiDate: function () {

return new Date().toJSON().slice(0,10)

}

});

})(jQuery);

```

调用方式

```

$.hiDate();

```

### 结束

没事写写代码,写写后端,写写前端,哦,js已经不仅限于前端啦

小写怡情,大写伤身。

:)~

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: