挑战高手的超难问题,分不够再加
<script language=javascript>
function Obj1(){
//....
this.A1 = "我是对象一"
}
function Obj2(){
this.aa = "";
}
Obj2.prototype={
Bfun1:function(){
tObj = new Obj1();
tObj.Afun1 = function(){
(alert(this.A1));//这里的this原来是Obj1,而不是Obj2,有什么办法可以在这里面取到Obj2的对象句柄
}
tObj.Afun1();
},
Bfun2 : function(){
alert(this.aa);
}
}
var a2=new Obj2();
a2.Bfun1();
</script>
问题点数:20、回复次数:12Top
1 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-14 20:53:06 得分 20
<script language=javascript>
function Obj1(){
//....
this.A1 = "我是对象一"
if(arguments[0]!=null)
{
this.obj=arguments[0];
}
}
function Obj2(){
this.aa = "11";
}
Obj2.prototype={
Bfun1:function(){
tObj = new Obj1(this);
tObj.Afun1 = function(){
(alert(this.obj.aa));//这里的this原来是Obj1,而不是Obj2,有什么办法可以在这里面取到Obj2的对象句柄
}
tObj.Afun1();
},
Bfun2 : function(){
alert(this.aa);
}
}
var a2=new Obj2();
a2.Bfun1();
</script>Top
2 楼hansonboy(hansonboy)回复于 2006-03-15 09:29:35 得分 0
非常感谢, 但这种情况不知应该怎样写呢?
function dragClass()
{
this.parentTable = "parentTable";
this.objName = "";
this.draged=false; //是否正在拖动
this.loadDataOk = false;
this.oDiv=null; //拖动的层
this.dragObj = null; //拖动的对象
this.isFF = navigator.userAgent.indexOf("Firefox")>= 0; //检查浏览器是否为firefox
this.doInitTime = 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
dragClass.prototype =
{
readUserData : function(pFile)//读取用户设置的模块
{
var xmlObj = null;
if(window.XMLHttpRequest)
{
xmlObj = new XMLHttpRequest();
} else if(window.ActiveXObject)
{
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} else
{
return;
}
xmlObj.onreadystatechange = function()
{
if(xmlObj.readyState == 4 )
{
if(xmlObj.status == 200)
{ //这里的this就不在是dragClass,所以在这里使用this.processXML就会出错了,在这里应该怎样写才能取得dragClass的对象句柄呢?
this.processXML(xmlObj.responseXML);
xmlObj = null;
}
this.loadDataOk = true;
}
}
xmlObj.open ('GET', pFile, true);
xmlObj.send ('');
},
processXML : function(pObj)
{
//........
}
}Top
3 楼hansonboy(hansonboy)回复于 2006-03-15 13:29:30 得分 0
upTop
4 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-15 13:54:21 得分 0
你可以把那个processXML方法提到外面来,类似于下面的方法
<script language=javascript>
function Obj1(){
//....
this.A1 = "我是对象一"
}
function Obj2(){
this.aa = "11";
}
function show(){
alert(arguments[0].aa)
}
Obj2.prototype={
Bfun1:function(){
tObj = new Obj1();
tObj.Afun1=show.call(null,this)
tObj.Afun1();
},
Bfun2 : function(){
alert(this.aa);
}
}
var a2=new Obj2();
a2.Bfun1();
</script>Top
5 楼hansonboy(hansonboy)回复于 2006-03-15 14:22:21 得分 0
tObj.Afun1=show.call(null,this)//这个好像不是这样的吧, 如果这样下面一句就出错了
tObj.Afun1();Top
6 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-15 14:43:01 得分 0
恩,是出错了,不要那句了Top
7 楼hansonboy(hansonboy)回复于 2006-03-15 14:50:29 得分 0
那应该怎样写呢?Top
8 楼gledestrong(glede)回复于 2006-03-15 15:07:14 得分 0
在前面设置一个变量为this
然后调用这个变量!
temp = this;
temp.processXML(xmlObj.responseXML);Top
9 楼hansonboy(hansonboy)回复于 2006-03-15 15:59:00 得分 0
这种方法我一早就试过了, 但对象赋值temp = this;是复制多一份出来,而不是指针,也就是说赋值后在temp <> this了, 虽然都是同一个类的对象,但如果this里的一些属性在这个赋值后改变了,temp也不能取得这些值, 还是赋值前的初始值,而temp.processXML(xmlObj.responseXML);
如果processXML改变了一些属性的值, this也不能取到的, 所以这样做基本上没有意义, 等于两个相同的程序做同一样东西,但结果又不能结合Top
10 楼hansonboy(hansonboy)回复于 2006-03-15 18:17:27 得分 0
upTop
11 楼hansonboy(hansonboy)回复于 2006-03-16 08:48:46 得分 0
最后一顶Top
12 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-17 16:12:10 得分 0
ye~~~~~~~~~~~~~~~~
这个问题终于想明白了,嘿嘿
<script language=javascript>
function Obj1(){
//....
this.A1 = "我是对象一"
}
function Obj2(){
this.aa = "11";
}
Obj2.prototype={
Bfun1:function(){
tObj = new Obj1();
obj=this;
tObj.Afun1 = function(obj){
(alert(obj.aa));//这里的this原来是Obj1,而不是Obj2,有什么办法可以在这里面取到Obj2的对象句柄
}
tObj.Afun1(obj);
},
Bfun2 : function(){
alert(this.aa);
}
}
var a2=new Obj2();
a2.Bfun1();
</script>Top




