JS高级编程技巧

138 阅读1分钟

堕性函数

单例设计模式

let untils = (function(){
	let plana = function (){
    	// doing...
    }
    let planb = function (){
    	//todo...
    }
    return {
    	plana,
        planb
    }
})()
// 利用闭包的保护机制防止变量名冲突
let persons = (function(){
	let plana = function(){
    	untils.plana()
    }
    return {}
})()

DOM2事件绑定方式

元素.addEventListener  
元素.attachEvent
function emit (element,type,func) {
	if(element.addEventListener) {
   	element.addEventListener(type,func,false)
   } else if (element.attachEvent) {
   	element.attachEvent('on'+type,func)
   } else {
   	element['on'+type] = func
   }
}
// 这样浏览器每次就需要做兼容判断,但是我第一次判断之后就已经知道是否兼容去执行某个函数

function emit(element,type,func) {
   if(element.addEventListener) {
   	emit = function(element,type,func) {
       	element.addEventListener(type,func,false)
       }
   } else if (element.attachEvent) {
   	emit = function(element,type,func) {
   		element.attachEvent('on'+type,func)
   	}
   } else {
       emit = function(element,type,func) {
   		element['on'+type] = func
   	}
   }
   emit(element,type,func)
}
//这样就只需要判断一次就可以了、

柯理化函数的思想

利用闭包的机制拔一下内容先存储和处理了,等到后期需要的时候拿来即用既可

function bind (func,context,...args) {
	return function (ev) {
   	func.call(context,...args)
   }
}

(function bind(proto){
	function bind (context = window, ...outArgs) {
   	let _this = this
       return function proxy(...ev){
       	let args = outArgs.concat(ev)
       	_this.call(context, ...args)
       }
   }
   proto.bind = bind
})(Function.prototype)