- 主题:请教一个javascript的问题
定义了一个类foo,然后引用了一个第三方类SOAPClient,这个类里面的方法都是类方法。
function foo(){}
foo.prototype.run = function(){
SOAPClient.invoke(params,this.soapCallback); //调用类方法,第二个参数是回调函数。
};
foo.prototype.run2 = function(){...};
foo.prototype.soapCallback = function(){
//这里我想调用run2,但是这时候上下文关系变成了SOAPClient,找不到foo的实例了,因此无法调用run2
请问在这里我如何才能把foo的实例传进来呢? 用全局变量是一种思路,自己修改第三方库把foo的实例传进去是一种思路,还有别的思路么?
}
--
修改:Kiessling FROM 222.130.132.*
FROM 222.130.132.*
this
【 在 Kiessling (至今思莱帝,不愿离拜仁) 的大作中提到: 】
: 定义了一个类foo,然后引用了一个第三方类SOAPClient,这个类里面的方法都是类方法。
: function foo(){}
: foo.prototype.run = function(){
: ...................
--
FROM 183.95.135.*
jquery: $.proxy(this.run2,this)
或者:(function(o){
return function(){
o.run2.call(o)
}
})(this)
【 在 Kiessling (至今思莱帝,不愿离拜仁) 的大作中提到: 】
: 定义了一个类foo,然后引用了一个第三方类SOAPClient,这个类里面的方法都是类方法。
: function foo(){}
: foo.prototype.run = function(){
: ...................
--
FROM 114.249.235.*
是在soapCallback里调run2,这里this已经不是原来的了,因为invoke里面有个异步和服务器通信,callback是通信回来时调的
不过今天我想了一下,SOAPClient不是一个现成的全局变量么,我直接
在run里写了SOAPClient.extradata=this,就行了...
【 在 Eliot (好警察) 的大作中提到: 】
: jquery: $.proxy(this.run2,this)
: 或者:(function(o){
: return function(){
: ...................
--
FROM 222.130.132.*
proxy后传递的函数里,把原来的this作为局部变量保存了。回调里调用是没有问题的。
你这样也可以。但你得保证一次回调返回期间不会有其他调用发生
【 在 Kiessling (至今思莱帝,不愿离拜仁) 的大作中提到: 】
: 是在soapCallback里调run2,这里this已经不是原来的了,因为invoke里面有个异步和服务器通信,callback是通信回来时调的
: 不过今天我想了一下,SOAPClient不是一个现成的全局变量么,我直接
: 在run里写了SOAPClient.extradata=this,就行了...
: ...................
--
FROM 114.249.235.*
嗯。。proxy要执行的是callback,不是run2
谢谢指导
【 在 Eliot (好警察) 的大作中提到: 】
: proxy后传递的函数里,把原来的this作为局部变量保存了。回调里调用是没有问题的。
: 你这样也可以。但你得保证一次回调返回期间不会有其他调用发生
--
修改:Kiessling FROM 222.130.132.*
FROM 222.130.132.*
foo.prototype.xxx = function(){
var that = this;
..... funciton(){
....function(){
xxx.apply(that,arguments)
}
}
}
【 在 Kiessling (至今思莱帝,不愿离拜仁) 的大作中提到: 】
: 嗯。。proxy要执行的是callback,不是run2
: 谢谢指导
--
FROM 61.135.152.218
嗯,明白了,谢谢
【 在 shaolin (漫漫当爹路) 的大作中提到: 】
: foo.prototype.xxx = function(){
: var that = this;
: ..... funciton(){
: ...................
--
FROM 222.130.132.*