Скажімо, я маю це:
test = function() {
this.init = function() {
$("#someElement").html("Hey!").mousedown(function() {
$(this).html("Clicked");
/*
Now, if I wanted it to call function "dosomething" defined in the class, how would I do that? this.dosomething() obviously doesn"t work.
*/
});
}
this.dosomething = function() {
alert("Did it!");
}
}
var _go = new test();
_go.init();
Відповіді:
1 для відповіді № 1Ви можете встановити контекст, перш ніж втратити посилання на свій клас:
test = function() {
var context = this;
init = function() {
$("#someElement").html("Hey!").mousedown(function() {
$(this).html("Clicked");
context.dosomething();
});
}
dosomething = function() {
alert("Did it!");
}
}
2 для відповіді № 2
Інкапсулюйте виклик "щось" у змінну javascript у вашій зовнішній функції та посилання на неї у вашій внутрішній функції.
this.init = function() {
var doSomething = this.doSomething;
$("#someElement").html("Hey!").mousedown(function() {
$(this).html("Clicked");
doSomething();
});
}
Це створює закриття, де внутрішня функція все ще має посилання на змінні у зовнішній функції.
0 для відповіді № 3
Попередньо оголосіть тест новою функцією ().
test = new function() {};
test.init = function() {
test.foo();
};
Я впевнений, що існують інші / кращі способи зробити це, але я знаю, що це працює.