Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вызов метода из метода (https://javascript.ru/forum/misc/32433-vyzov-metoda-iz-metoda.html)

qwermjk 16.10.2012 11:39

Вызов метода из метода
 
function Class(){
   this.qqq = function(){
      ...
   }

   this.ggg = function(){
      ...
      this.qqq(); // не работает такой способ вызова
   }
}

Как можно вызвать метод из другова метода?

vashurin 16.10.2012 11:43

Цитата:

Сообщение от qwermjk (Сообщение 210428)
function Class(){
   this.qqq = function(){
      ...
   }

   this.ggg = function(){
      ...
      this.qqq(); // не работает такой способ вызова
   }
}

Как можно вызвать метод из другова метода?

function Class(){
   this.a = function(){
      alert('все работает');
   }

   this.b = function(){
      this.a(); 
   }
}

qwermjk 16.10.2012 11:46

TypeError: this.a is not a function
неработает такой вызов, незнаю почему!!

Skipp 16.10.2012 11:48

Как же не работает?
function Class(){
	 this.qqq = function(){
		alert(10);
	 }

	 this.ggg = function(){
		this.qqq(); // не работает такой способ вызова
	}
}
		
var t = new Class();
t.ggg();

qwermjk 16.10.2012 11:49

Протестировал вот это в отдельном файле, сработало ...
А в моём сценарии не хочет запускаться, фаер баг ошибок не отловил до этого момента

vashurin 16.10.2012 11:51

Цитата:

Сообщение от qwermjk (Сообщение 210434)
TypeError: this.a is not a function
неработает такой вызов, незнаю почему!!

<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>

qwermjk 16.10.2012 11:51

Что может значить ошибка такого типа "TypeError: this.a is not a function"??

Skipp 16.10.2012 11:53

qwermjk,
Ну переведи, там же ясно написано
this.a не является функцией.

qwermjk 16.10.2012 11:55

Как это перевести, я знаю, а почему не работает, вот это вопрос!

Skipp 16.10.2012 11:59

Мы тут не телепат, я не знаю что у вас там в коде не так, что выдаёт ошибку.
Хотя могу попробовать свои экстрасенсорные способности: наверное this это объект window, по этому и нет у него метода a.

qwermjk 16.10.2012 12:00

я запускаю метод b() через setTimeout, и из за этого не работает, а если запускаю без него всё работает!
но нужна задержка в полторы секунды, как быть?
setTimeout(c.b,1500);

Skipp 16.10.2012 12:06

Так правильно:
function Class(){
	 this.qqq = function(){
		alert("А не как хочется");
	}

	 this.ggg = function(){

		this.qqq(); // не работает такой способ вызова
	}
}
		
var qqq = function(){
	alert("Работает так как и должно!");
}
		
var t = new Class();
setTimeout(t.ggg, 1500);

qwermjk 16.10.2012 12:06

function Class(){
   this.a = function(){
      alert('все работает');
   }

   this.b = function(){
      this.a(); 
   }
}
var c = new Class();


setTimeout(c.b,1500);

Попробуйте сами этот код!

qwermjk 16.10.2012 12:08

Почему так оно сработало???

qwermjk 16.10.2012 12:12

Почему оно вызвало функцию а не метод? я понял что с этим как то связан setTimeout и this

Skipp 16.10.2012 12:13

Потому, что вызов идёт от объекта 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);

Magneto 16.10.2012 12:14

Цитата:

Сообщение от qwermjk
Почему так оно сработало???

Потому что ты не знаешь основ JavaScript, а уже пытаешься писать псевдоклассы.

qwermjk 16.10.2012 12:19

Skipp,
Спасибо большое!!! я теперь понял ..
...
this.filter = 'div';
this.qqq = 123;
...
this.ttt = function(){
   $(this.filter).each(function(){
      alert(this.qqq)
   });
}

Можно как нибудь такой случай обойти?? без использования объевляния дополнительной переменной

qwermjk 16.10.2012 12:20

Magneto,
не пытаясь что то делать, уровень знаний останется на месте

Skipp 16.10.2012 12:22

Ээмм вот так?:)
this.ttt = function(){
   $("div").each(function(){
      alert(123)
   });
}

qwermjk 16.10.2012 12:23

Skipp,
смешно конечно! Но эти значения я указал для примера, мне нужно чтобы внутрь можно было свойство запихать а не просто текст!!!

Skipp 16.10.2012 12:25

Тогда вроде всё правильно или же я не понимаю, что надо.

qwermjk 16.10.2012 12:32

$(this.filter).each(function(){
   alert(this.a); // я пытаюсь достать текст из свойства 'a', этот вариант не работает из за функции у each, приходится создавать переменную и в неё уже это пихать! мож есть способ чтобы её не создавать?
});


var d = this.a;
$(this.filter).each(function(){
   alert(d); // вот этот вариант работает, а хотелось бы без создания дополнительной переменной
});

qwermjk 16.10.2012 12:35

Skipp,
Спасибо что помог, это так дополнительный вопрос, у меня всё работает =)

Maxmaxmахimus 16.10.2012 12:36

что мешает тестить скрипт в НОРМАЛЬНОМ отладчике хрома и сделать в методе b так

this.b = function(){
    console.log(this)
}


и поизучать обьект this посмотреть его свойства и.т.п.

что мешает???

Skipp 16.10.2012 12:38

var d то же самое что и this.d
var это не создание переменной, а установка области видимости.

var d = this.a;
$(this.filter).each(function(){
   alert(this.d); // вот этот вариант работает, а хотелось бы без создания дополнительной переменной
});


Часовой пояс GMT +3, время: 10:07.