Теория создания плагинов

Когда-то писал пост о том как грамотно сделать плагин для jquery, что бы те кто его использует не ругались матом. Пришло время обновить пост, хотя ничего из ниже сказаного не будет новостью.


(function (context, factory) {
	"use strict";

	if (typeof define === "function" && define.amd) {
		define(["jquery"], factory);
	} else {
		factory(context.jQuery);
	}
})(this, function ($) {
	"use strict";

	var defaults = {

	};

	var Plugin = function (element, options) {
		this.init(element, options);
	};

	Plugin.prototype = {
		constructor: Plugin,

		init: function () {
			// ...
		}

		// ...
	};

	$.fn.plugin = function (options) {

		options = $.extend(true, {}, defaults, options);

		return this.each(function () {
			this.data("plugin", new Plugin(this, options));
		});
	};

	$.fn.plugin.defaults = defaults;
	$.fn.plugin.Plugin = Plugin;
});