UEeditor之util.js 学习总结

makeInstance(以obj为原型对象创建实例)

/*
	//对象之间的赋值属于浅复制
	var b = {name:"David"};
	a = b;
	b.name = "Jhon";
	console.log(a.name);//"Jhon"
	*/
	
	var book = {
		bookname:"Js Book",
		page:108
	}
	var makeinstance = function(obj){
		function f(){};
		f.prototype = obj;//f.prototype和obj对象共同指向一个对象实例
		obj = new f;//实例化之后obj._proto_指向f.prototype所指向的实例
		f.prototype = null;//垃圾回收
		//console.log(obj.__proto__ );
		//每个实例都包含[[Prototype]]属性,但是这个属性不可见且不能枚举。
		return obj;
	}
	var a_obj = makeinstance(book);

defer.js

defer利用闭包创建一个延迟执行的函数,封装timeid属性。

var defer = function(fn,delay,exclusion){
	var timeId;
	return function(){
		if(exclusion){
			clearTimeout(timeId);
		}
		timeId = setTimeout(fn,delay);
	}
}

domReady.js

类似$(document).ready函数,当dom加载成功后调用相应的函数,这里的写法类似于jq的源码。

var domReady = function(){
		var isReady = false
			fnArr = [];
		function doReady(){
			isReady = true;
			for(var ci;ci=fnArr.pop();){//这里不用判定ci是否存在?
				ci();//可能pop没了就会结束
			}
		}
		
		return function(onready){
			if(document.readyState ==="complete"){//document加载有两个状态interactive和complete
				return setTimeout(onready,1);
			}
			
			onready&&fnArr.push(onready);
			isReady&&doReady();
			
			(function(){
				if(isReady)return;
				try{
					document.documentElement.doScroll("left");//ie中是否确定dom加载成功
				}catch(e){
					setTimeout(arguments.callee,0);//让渲染线程先占用cpu
					return;
				}
				doReady();
					  })();
			window.attachEvent('onload',doReady);//更好的兼容各浏览器
		}
}();






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值