Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с объектом javasript (https://javascript.ru/forum/misc/12986-problema-s-obektom-javasript.html)

palesika2002 11.11.2010 18:53

Проблема с объектом javasript
 
В общем такой вопрос: Есть объект в котором объявлен метод. Необходимо внутри объекта объявить событие которое запустит этот метод. Через глобальную переменную не подходит. Смотреть пример:
function Test(){
         var a = 8;
         var b = 15;
         this.method = function() {
          alert(a+b);
         }

          //собственно вопрос
         window.onresize = function(){this.method();}
      }

var a = new test();


говорят можно как то перед

B@rmaley.e><e 11.11.2010 19:20

Кешируйте this в локальную переменную.

palesika2002 11.11.2010 20:17

не совсем понял типа
window.onresize = function(){a.method();}

B@rmaley.e><e 11.11.2010 20:23

Да, а строчкой ранее
var a = this;
И не a, а какое-нибудь другое, не занятое имя.

рони 11.11.2010 20:34

а если так?
function test(){
         var a = 8;
         var b = 15;
         this.method = function() {
          alert(a+b);
         }


         window.onresize = this.method;
      }
var a = new test();

Kolyaj 11.11.2010 21:28

http://javascript.ru/tutorial/object/thiskeyword

palesika2002 12.11.2010 11:28

Цитата:

Сообщение от рони (Сообщение 78687)
а если так?
function test(){
         var a = 8;
         var b = 15;
         this.method = function() {
          alert(a+b);
         }


         window.onresize = this.method;
      }
var a = new test();

Так не работает. this не попадает в область видимости.

palesika2002 12.11.2010 11:30

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 78686)
Да, а строчкой ранее
var a = this;
И не a, а какое-нибудь другое, не занятое имя.


Получается мы объявим переменную глобально. НЕ хотелось. Хочется чтоб все было внутри объекта, ведь на то оно и есть ООП.

Gvozd 12.11.2010 11:45

Цитата:

Сообщение от palesika2002 (Сообщение 78784)
Цитата:

Сообщение от B@rmaley.e><e (Сообщение 78686)
Да, а строчкой ранее
var a = this;
И не a, а какое-нибудь другое, не занятое имя.

Получается мы объявим переменную глобально. НЕ хотелось. Хочется чтоб все было внутри объекта, ведь на то оно и есть ООП.

Не пиши тупость.
в данном коде создается замыкание, при помощи ЛОКАЛЬНОЙ переменной.
это, кстати очень даже правильное решение в контексте данного языка
http://javascript.ru/basic/functions#oblasti-vidimosti
http://javascript.ru/basic/closure


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