关于js中function的疑惑

alltimekiller 2007-01-10 11:15:57
小弟在使用js function时遇到一个问题:
首先自定义一个object:
MyObject=funtion(name,age){
this.name=name
this.age=age
}
MyObject.prototype={
test:function(){
alert(this.name)
}
}
然后在html:
其他省略
<head>
<script....>
var a = new MyObject("Jack","20")
onload=function(){
document.getElementById('button').onclick=a.test
}
</script>
</head>
这样的话alert出来的结果是一个empty,而不是"jack",而如果改成a.test()的话就可以得到"jack",当然,如果该了得话,就不是一个回调函数了。
我想知道为什么把a.test作为一个object赋值给onclick后就不能得到a的proprty了呢?
我自己的理解是这里a.test作为一个object,已经脱离了MyObject而单独存在,所以不能引用a里面的class variable,不知道这样理解对不对。
...全文
262 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meizz 2007-01-10
  • 打赏
  • 举报
回复
王辰说得精彩!
muxrwc 2007-01-10
  • 打赏
  • 举报
回复
如楼上所说的..
你document.getElementById('button').onclick = a.test;
这句话就相当于..
document.getElementById('button').onclick = function () {
alert(this.name);
}
因为你那样写是把a.test那个函数给onclick;
这样的话this就等于document.getElementById('button')而不是a...
所以是empty...

window.onload = function () {
document.getElementById('button').onclick = function () {
a.test();
};
}
就可以了..
不用apply ^o^
chaonan 2007-01-10
  • 打赏
  • 举报
回复
楼上说的没错解决这样的问题
你可以用function对象的apply函数把调用的函数里的this指针换成传入的指针
象下面这样
document.getElementById('button').onclick=function(){a.test.apply(a)}
alltimekiller 2007-01-10
  • 打赏
  • 举报
回复
查了一下资料,发现如果用onclick的话,传入的"this"会是dom节点对象,因为button的name没有定义,所以是一个empty string,问题应该出现在这里
guoweihrh 2007-01-10
  • 打赏
  • 举报
回复
关注
dh20156 2007-01-10
  • 打赏
  • 举报
回复
关注ing...
煊烨 2007-01-10
  • 打赏
  • 举报
回复
window.onload = function(){
var obj= document.getElementById('button') ;
obj.funobj = a;
obj.onclick = function (){
this.funobj.test();
}
}
煊烨 2007-01-10
  • 打赏
  • 举报
回复
这样写的话会导致a无法被释放。。多的话应该也会有问题

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧