Вызов метода из метода
function Class(){ this.qqq = function(){ ... } this.ggg = function(){ ... this.qqq(); // не работает такой способ вызова } } Как можно вызвать метод из другова метода? |
Цитата:
function Class(){ this.a = function(){ alert('все работает'); } this.b = function(){ this.a(); } } |
TypeError: this.a is not a function
неработает такой вызов, незнаю почему!! |
Как же не работает?
function Class(){ this.qqq = function(){ alert(10); } this.ggg = function(){ this.qqq(); // не работает такой способ вызова } } var t = new Class(); t.ggg(); |
Протестировал вот это в отдельном файле, сработало ...
А в моём сценарии не хочет запускаться, фаер баг ошибок не отловил до этого момента |
Цитата:
<html> <body> <script type="text/javascript"> function Class(){ this.a = function(){ alert('все работает'); } this.b = function(){ this.a(); } } var c = new Class(); c.b(); </script> </body> </html> |
Что может значить ошибка такого типа "TypeError: this.a is not a function"??
|
qwermjk,
Ну переведи, там же ясно написано this.a не является функцией. |
Как это перевести, я знаю, а почему не работает, вот это вопрос!
|
Мы тут не телепат, я не знаю что у вас там в коде не так, что выдаёт ошибку.
Хотя могу попробовать свои экстрасенсорные способности: наверное this это объект window, по этому и нет у него метода a. |
я запускаю метод b() через setTimeout, и из за этого не работает, а если запускаю без него всё работает!
но нужна задержка в полторы секунды, как быть? setTimeout(c.b,1500); |
Так правильно:
function Class(){ this.qqq = function(){ alert("А не как хочется"); } this.ggg = function(){ this.qqq(); // не работает такой способ вызова } } var qqq = function(){ alert("Работает так как и должно!"); } var t = new Class(); setTimeout(t.ggg, 1500); |
function Class(){ this.a = function(){ alert('все работает'); } this.b = function(){ this.a(); } } var c = new Class(); setTimeout(c.b,1500); Попробуйте сами этот код! |
Почему так оно сработало???
|
Почему оно вызвало функцию а не метод? я понял что с этим как то связан setTimeout и this
|
Потому, что вызов идёт от объекта window, то есть this там не ваш Class, а window.
function Class(){ this.qqq = function(){ alert("А теперь как надо и как хочется"); } this.ggg = function(){ this.qqq(); // не работает такой способ вызова } } var qqq = function(){ alert("Не запуститься"); } setTimeout(function(){ var t = new Class(); t.ggg(); }, 1500); |
Цитата:
|
Skipp,
Спасибо большое!!! я теперь понял .. ... this.filter = 'div'; this.qqq = 123; ... this.ttt = function(){ $(this.filter).each(function(){ alert(this.qqq) }); } Можно как нибудь такой случай обойти?? без использования объевляния дополнительной переменной |
Magneto,
не пытаясь что то делать, уровень знаний останется на месте |
Ээмм вот так?:)
this.ttt = function(){ $("div").each(function(){ alert(123) }); } |
Skipp,
смешно конечно! Но эти значения я указал для примера, мне нужно чтобы внутрь можно было свойство запихать а не просто текст!!! |
Тогда вроде всё правильно или же я не понимаю, что надо.
|
$(this.filter).each(function(){ alert(this.a); // я пытаюсь достать текст из свойства 'a', этот вариант не работает из за функции у each, приходится создавать переменную и в неё уже это пихать! мож есть способ чтобы её не создавать? }); var d = this.a; $(this.filter).each(function(){ alert(d); // вот этот вариант работает, а хотелось бы без создания дополнительной переменной }); |
Skipp,
Спасибо что помог, это так дополнительный вопрос, у меня всё работает =) |
что мешает тестить скрипт в НОРМАЛЬНОМ отладчике хрома и сделать в методе b так
this.b = function(){ console.log(this) } и поизучать обьект this посмотреть его свойства и.т.п. что мешает??? |
var d то же самое что и this.d
var это не создание переменной, а установка области видимости. var d = this.a; $(this.filter).each(function(){ alert(this.d); // вот этот вариант работает, а хотелось бы без создания дополнительной переменной }); |
Часовой пояс GMT +3, время: 10:07. |