小弟在使用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,不知道这样理解对不对。

解决方案 »

  1.   

    查了一下资料,发现如果用onclick的话,传入的"this"会是dom节点对象,因为button的name没有定义,所以是一个empty string,问题应该出现在这里
      

  2.   

    楼上说的没错解决这样的问题
    你可以用function对象的apply函数把调用的函数里的this指针换成传入的指针
    象下面这样
    document.getElementById('button').onclick=function(){a.test.apply(a)}
      

  3.   

    如楼上所说的..
    你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^
      

  4.   

    window.onload = function(){
             var obj= document.getElementById('button') ;
              obj.funobj = a;
              obj.onclick = function (){
    this.funobj.test();
    }
    }