小弟在使用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,不知道这样理解对不对。
首先自定义一个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,不知道这样理解对不对。
你可以用function对象的apply函数把调用的函数里的this指针换成传入的指针
象下面这样
document.getElementById('button').onclick=function(){a.test.apply(a)}
你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^
var obj= document.getElementById('button') ;
obj.funobj = a;
obj.onclick = function (){
this.funobj.test();
}
}