var login={
h:1,
a:function(){
return this.h;
},
b:function(){
var c=this.a()+1;
alert(c);
}
}
function addLoadEvent(func){
var oldLoad=window.onload;
if(typeof window.onload == 'function'){
window.onload=function(){
oldLoad();
func();
}
}
else{
window.onload=func;
}
}
addLoadEvent(login.b);
为什么报this.a() is not a function??
我猜想应该是这个this不是表示login对象,而是window对象了,但是想不通,请大神帮忙解惑下。然后说下常规解决办法。。。
作用域不同,this.a()指向是当前function的this而不是login的this对象
addLoadEvent(function(){login.b();});
我现在就是这么写的。。。。有没有比较好的设计?还是一般都是这么干的?小弟我初来乍到。。。
@少年学编程:
var login=(function(){
var _this= {
h:1,
a:function(){
return _this.h;
},
b:function(){
var c=_this.a()+1;
alert(c);
}
};
return _this;
})();
addLoadEvent(login.b);
@向往-SONG: 讲讲原因好不。。。。
@少年学编程:
没啥原因啊,只是把this用_this变量代替了而已,非科班出身不太会理论,只懂做不懂说哈--!
@向往-SONG: 额。。。好吧。我想明白了。。。login.b只是一个函数的地址,我做为直接参数传给addLoadEvent方法后处理为window.onload=login.b,页面加载完后应该是这样调用window.onload()方法,虽然window.onload跟login.b指向的是同一个函数。。。。但是谁调用的this指向谁嘛,所以指向的是window....学习学习
@少年学编程:
你是说这个啊,你传的是函数,当然跟login对象没关系了,this是指向它调用的对象。