suppose I have a function:
function test(){}
test.prototype.method01=function(){
//do something
}
test.prototype.method02=function(){
//how can I call the method01?
//this.method01()...?
//but the chrome through an error:
//Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01'
}
Edited: in fact the method01 like this:
test.prototype.method02=function(){
$('.cpy').resizable({
}).draggable({
start:function(e,ui){
this.method01();
}
});
}
suppose I have a function:
function test(){}
test.prototype.method01=function(){
//do something
}
test.prototype.method02=function(){
//how can I call the method01?
//this.method01()...?
//but the chrome through an error:
//Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01'
}
Edited: in fact the method01 like this:
test.prototype.method02=function(){
$('.cpy').resizable({
}).draggable({
start:function(e,ui){
this.method01();
}
});
}
Share
Improve this question
edited Mar 17, 2012 at 12:32
hh54188
asked Mar 17, 2012 at 12:25
hh54188hh54188
15.6k35 gold badges116 silver badges191 bronze badges
5
|
3 Answers
Reset to default 13test.prototype.method02=function(){
var testThing = this;
$('.cpy').resizable({
}).draggable({
start:function(e,ui){
testThing.method01();
}
});
}
You have to preserve the this
reference in another local variable so that the callback function can use it when calling the other method. The this
reference is bound upon each and every function call, including calls to callback functions like the one you're using in the ".draggable()" setup. When that's called this
will be set to something different from the this
in your "method02" function.
Yea, you could manually cache this
in the lexical scope like other answers in this question suggest. However, the alternative that i would suggest is to create a bound method using $.proxy
or function.bind
as your call back.
Bound methods are always called with a stable this
. I find them to be much more readable, than bizarrely named references to this
in higher scopes
whats about
test.prototype.method02=function(){
this.method01.apply(this);
// do some other stuff
}
method02
to an event of an image by any chance? – pimvdb Commented Mar 17, 2012 at 12:27method02
. You should read the MDN article aboutthis
. – Felix Kling Commented Mar 17, 2012 at 12:29start
callback,this
refers to the element you calldraggable
on, in this case.cpy
. You have to keep a reference to thethis
ofmethod02
. – Felix Kling Commented Mar 17, 2012 at 12:34