87,910
社区成员
发帖
与我相关
我的任务
分享
已经一通宵加一下午了,对闭包还是很模糊。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>闭包,我快吐血了,还没搞明白原理</title>
<script type="text/javascript">
//class Say
function Say(text){
this._text = text;
this._doSay = function(){
//引用HTML对象
var divObj = window.document.getElementById("SayHello");
//对象内写入HTML
divObj.innerHTML = this._text;//这里的this指针没变,任然是类对象(按理应该也是换了对象才对,疑问?)。
//divObj.onclick = function(){alert(this.id);}//错误:函数体内的this指针指向的是divObj对象 已经不是 类对象(那么this._text已经丢失,找不到了。)
//绑定事件
divObj.onclick = this._createDoSay();//调用闭包返回一个函数
}
//闭包,引用类对象,通过 事件模型 创建事件函数 返回给调用者。
this._createDoSay = function() {
var obj = this;//闭包引用指针,用该引用指针调用事件模型 而事件模型可以继续保持 this 关键字
return function(){
obj._doSayModel();//(这里是不是用原模型创建了一个新对象,疑问?)
}
}
//onclick事件模型
this._doSayModel = function() {
alert(this._text);
}
}
//class Say - over
//WEB main ^_^ WEB版的main方法。
window.onload = function(){
new Say("Hello World!!!!")._doSay();
}
</script>
</head>
<body>
<div id="SayHello"></div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>闭包,我快吐血了,还没搞明白原理</title>
<script type="text/javascript">
//class Say
function Say(text){
this._text = text;
this._doSay = function(){
//引用HTML对象
var divObj = window.document.getElementById("SayHello");
//对象内写入HTML
divObj.innerHTML = this._text;//这里的this指针没变,任然是类对象(按理应该也是换了对象才对,疑问?)。
//divObj.onclick = function(){alert(this.id);}//错误:函数体内的this指针指向的是divObj对象 已经不是 类对象(那么this._text已经丢失,找不到了。)
//绑定事件
divObj.onclick = function(i){return function(){i._doSayModel();}}(this)//调用闭包返回一个函数
}
//onclick事件模型
this._doSayModel = function() {
alert(this._text);
}
}
//class Say - over
//WEB main ^_^ WEB版的main方法。
window.onload = function(){
new Say("Hello World!!!!")._doSay();
}
</script>
</head>
<body>
<div id="SayHello">asdasd</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>闭包,我快吐血了,还没搞明白原理</title>
<script type="text/javascript">
//class Say
function Say(text){
this._text = text;
this._doSay = function(){
//引用HTML对象
var divObj = window.document.getElementById("SayHello");
//对象内写入HTML
divObj.innerHTML = this._text;//这里的this指针没变,任然是类对象(按理应该也是换了对象才对,疑问?)。
//divObj.onclick = function(){alert(this.id);}//错误:函数体内的this指针指向的是divObj对象 已经不是 类对象(那么this._text已经丢失,找不到了。)
//绑定事件
divObj.onclick = this._createDoSay();//调用闭包返回一个函数
}
//闭包,引用类对象,通过 事件模型 创建事件函数 返回给调用者。
this._createDoSay = function() {
//var obj = this;//闭包引用指针,用该引用指针调用事件模型 而事件模型可以继续保持 this 关键字
function(obj){
return function(){
obj._doSayModel();//(这里是不是用原模型创建了一个新对象,疑问?)
}
}(this);
}
//onclick事件模型
this._doSayModel = function() {
alert(this._text);
}
}
//class Say - over
//WEB main ^_^ WEB版的main方法。
window.onload = function(){
new Say("Hello World!!!!")._doSay();
}
</script>
</head>
<body>
<div id="SayHello">asdasd</div>
</body>
</html>