<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dansion&#039;s 日志 &#187; Javascript</title>
	<atom:link href="http://www.dansion.com/blog/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dansion.com/blog</link>
	<description>学无止境～～～～～～～</description>
	<lastBuildDate>Thu, 29 Sep 2011 09:25:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>闭包!!!</title>
		<link>http://www.dansion.com/blog/javascript/closure.html</link>
		<comments>http://www.dansion.com/blog/javascript/closure.html#comments</comments>
		<pubDate>Wed, 17 Jun 2009 09:52:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.dansion.com/blog/?p=788</guid>
		<description><![CDATA[刚接触到这个词，晕忽了许久。
1.闭包是在其词法上下文中引用了自由变量的函数。
2.如果在一个内部函数里，对在外部作用域（但不是在全局作用域）的变量进行引用，那么内部函数就被定义为闭包。
3.在实现深约束时，需要创建一个能显式表示引用环境的东西，并将它与相关的子程序捆绑在一起，这样捆绑起来的整体被称为闭包。
闭包！是不越看越晕啊，还不如直接用代码来说明：
例子1，创造一个函数。该函数内部的x是无法外部访问的。
var myfunc=function(){
var x=0;
return function(){
return x;
}
};
例子2：创造一个方法。
var addx=function(x) {
return function(y) {return x+y;};
}
a=addx(8); //先定义x
alert(a(10));//运算8+10
结果：18
例子3，创造一个对象。x同样是无法外部访问的。注意最后一行的()，作用是马上调用构造出来的函数。
var myobj=function(){
var x=0;
return {
fun1:function(){alert(x+1);},
fun2:function(){alert(x+1);}
};
}();
例子4:利用闭包给attachEvent侦听函数增加参数
dom节点.attachEvent(&#8221;onclick&#8221;,onclickfun(arg1,arg2));
 
var onclickfun=function(arg1,arg2){
return function(){
alert(arg1);
alert(arg2); //代码块，arg1,arg2
}
}
]]></description>
		<wfw:commentRss>http://www.dansion.com/blog/javascript/closure.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让ie支持DOM2事件模型写法</title>
		<link>http://www.dansion.com/blog/javascript/ie-dom2.html</link>
		<comments>http://www.dansion.com/blog/javascript/ie-dom2.html#comments</comments>
		<pubDate>Tue, 09 Jun 2009 16:41:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://www.dansion.com/blog/?p=782</guid>
		<description><![CDATA[这几天要用js做点东西，又不用现成的框架。
习惯了as3的语法，对ie的window.evnet事件机制忒不习惯。敲了一些代码，让ie8支持dom2事件模型,当然只是泡冒模型。
function $(s){
if(window.container==undefined){
window.container=new Object();//空器，让每个$(&#8221;id&#8221;)同一id得到是同一个
}
if(window.container[s]==undefined){
obj=document.getElementById(s);
window.container[s]=obj;
if(getBrowser(&#8221;MSIE&#8221;)){
obj.eventListeners=new Array();  //事件列表容器
obj.addEvent=function(action,obj,bubble,fun){//委托处理事件
var delegate=function(){
window.event.cancelBubble=bubble;
//丢出事件
var evt=new Event(action,window.event.srcElement,obj,bubble);
if(action==&#8221;onmouseover&#8221;){
evt.relatedTarget=window.event.fromElement;
}else if(action==&#8221;onmouseout&#8221;){
evt.relatedTarget=window.event.toElement;
}
evt.clientX=window.event.clientX;
evt.clientY=window.event.clientY;
evt.screenX=window.event.screenX;
evt.screenY=window.event.screenX;
fun(evt);
}
obj.eventListeners.push({func:fun,delegateFunc:delegate});
return delegate;
}
obj.addEventListener=function(action,fun,bubble){//给对象增加addEventListener方法
action=&#8221;on&#8221;+action;
obj.attachEvent(action,obj.addEvent(action,obj,bubble,fun));
}
obj.removeEventListener=function(action,fun,bubble){//给对象增加removeEventListener方法
for(var i=0;i&#60;obj.eventListeners.length;i++){
if(obj.eventListeners[i].func==fun){
action=&#8221;on&#8221;+action;
obj.detachEvent(action,obj.eventListeners[i].delegateFunc);
}
}
}
return obj;
}else{
//非IE浏览器，只测了FF,google的
var obj=document.getElementById(s);
obj.contains=function(tgt){//contains方法很实用，flash as里也有，就给添加一个。
while(tgt!=null&#38;&#38;typeof(tgt.tagName)!=&#8221;undefind&#8221;){
if(tgt==this){return true};
tgt=tgt.parentNode;
}
return false;
}
return obj;
}
}else{
return window.container[s];
}
}
//判断是否是指定浏览器
function getBrowser(browserType){
var browser=navigator.userAgent;
if (browser.indexOf(browserType)&#62;0){
return true;
}
}
//事件&#8221;类&#8221;
function Event(type,target,currentTarget,bubble){
this.currentTarget=currentTarget;
this.type=type;
this.target=target;
this.bubble=bubble;
this.toString=function(){
return &#8220;[Event type="+type+" bubble="+bubble+" target:"+target.name+" currentTarget="+currentTarget.name+"]&#8220;;
}
}
先这样了，有空再优化扩展一下。
应用例子：
$(&#8221;div1&#8243;).addEventListener(&#8221;mouseover&#8221;,eventover,false);
$(&#8221;div1&#8243;).addEventListener(&#8221;mouseout&#8221;,eventout,false);
function eventover(e){
if(!e.currentTarget.contains(e.relatedTarget)){
alert(&#8221;in&#8221;);
}
}
function eventout(e){
if(!e.currentTarget.contains(e.relatedTarget)){
alert(&#8221;out&#8221;);
}
}
function cancel(){
$(&#8221;div1&#8243;).removeEventListener(&#8217;mouseout&#8217;,eventout,false);
$(&#8221;div1&#8243;).removeEventListener(&#8217;mouseover&#8217;,eventover,false);
}
]]></description>
		<wfw:commentRss>http://www.dansion.com/blog/javascript/ie-dom2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

