this._createDoSay = function() {
var obj = this;//闭包引用指针,用该引用指针调用事件模型 而事件模型可以继续保持 this 关键字
return function(){
obj._doSayModel();//(这里是不是用原模型创建了一个新对象,疑问?)
}
}
这部分也可以不用定义个变量obj=this,注释还是你的注释,没改,这个问题想清楚是有些麻烦的,我记得好象BlueDestiny兄弟以前写了一个BLOG,看看那个会有些帮助<!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>
var obj = this;//闭包引用指针,用该引用指针调用事件模型 而事件模型可以继续保持 this 关键字
return function(){
obj._doSayModel();//(这里是不是用原模型创建了一个新对象,疑问?)
}
}
这部分也可以不用定义个变量obj=this,注释还是你的注释,没改,这个问题想清楚是有些麻烦的,我记得好象BlueDestiny兄弟以前写了一个BLOG,看看那个会有些帮助<!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>
http://www.never-online.net/blog/article.asp?id=106
this._createDoSay = function() {
var wc = this; //这里只不过是把this对象的引用给wc 这个变量copy了一份。。
return function(){
wc._doSayModel(); //这里只是通过那个引用来执行那个对象的这个方法
}
}这里执行完毕后,这个函数的资源应该不会释放吧
貌似直到divObj.onclick = null的时候才会释放prototype里有个bind方法,和这个很类似的说
<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>
跟闭包有什么关系?