docs: function(holder, options) {
  			var self = this;
  			if (!holder) {
  				throw "构造 Locker 时缺少容器元素";
  			}
  			self.holder = holder;
  			//避免重复初始化开始
  			if (self.holder.__locker_inited) return;
  			self.holder.__locker_inited = true;
  			//避免重复初始化结束
  			//
  			self.options = options || {};
  			self.options.callback = self.options.callback || self.options.done || $.noop;
  			self.holder.innerHTML = '<canvas></canvas>';
  			//
  			self.holder.classList.add(lockerHolderClassName);
  			//初始化
  			var canvas = self.canvas = $.qsa('canvas', self.holder)[0];
  			canvas.on = canvas.addEventListener || function(name, handler, capture) {
  				canvas.attachEvent('on' + name, handler, capture);
  			};
  			canvas.off = canvas.removeEventListener || function(name, handler, capture) {
  				canvas.detachEvent('on' + name, handler, capture);
  			};
  			//
  			if (self.options.width) self.holder.style.width = self.options.width + 'px';
  			if (self.options.height) self.holder.style.height = self.options.height + 'px';
  			self.CW = self.options.width || self.holder.offsetWidth || self.CW;
  			self.CH = self.options.height || self.holder.offsetHeight || self.CH;
  			//处理 “宽、高” 等数值, 全部扩大 times 倍
  			self.R *= times;
  			self.CW *= times;
  			self.CH *= times;
  			self.OffsetX *= times;
  			self.OffsetY *= times;
  			//
  			canvas.width = self.CW;
  			canvas.height = self.CH;
  			var cxt = self.cxt = canvas.getContext("2d");
  			//两个圆之间的外距离 就是说两个圆心的距离去除两个半径
  			var X = (self.CW - 2 * self.OffsetX - self.R * 2 * 3) / 2;
  			var Y = (self.CH - 2 * self.OffsetY - self.R * 2 * 3) / 2;
  			self.pointLocationArr = self.caculateNinePointLotion(X, Y);
  			self.initEvent(canvas, cxt, self.holder);
  			//console.log(X);
  			self.draw(cxt, self.pointLocationArr, [], null);
  			setTimeout(function() {
  				self.draw(cxt, self.pointLocationArr, [], null);
  			}, 0);
  		}