Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с this / 13 сообщений из 13, страница 1 из 1
08.05.2009, 14:09
    #35976780
MaxPayne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
function mainFunction () {
this.el = 0;
this.elarray = [ { a:11, b:22, c:0 }, { a:111, b:222, c:1 }]
var element = this.elarray [this.el];
}

Как мне в другой функции найти и вывести этот элемент?
Пробовал так:

function function1 (event) {
alert(this.city)
}

Не получается.
...
Рейтинг: 0 / 0
08.05.2009, 14:10
    #35976784
MaxPayne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
Пробовал так:

function function1 (event) {
alert(this.el)
}

Не получается.
...
Рейтинг: 0 / 0
08.05.2009, 14:14
    #35976797
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
Код: plaintext
1.
2.
3.
4.
function test(){
 var mf=new mainFunction ();
 alert(mf.el);
 alert(mf.elarray[mf.el]);
}
...
Рейтинг: 0 / 0
08.05.2009, 15:36
    #35977070
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
При обработке событий контекст меняется, this указывает на другой объект, а не на функцию. Проще всего замкнуть нужный вам параметр при создании обработчика. То есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
function mainFunction () {
  this.el =  0 ;
  this.elarray = [ { a: 11 , b: 22 , c: 0  }, { a: 111 , b: 222 , c: 1  }]
  var element = this.elarray [this.el];
  function function1 () {
    that = this;
    return function(event){
      alert(that.el);
    }
  }
}

document...onclick = mainFunction.function1();

Но это плохо, лучше замыкать как можно меньшие объекты, что бы проще было следить за ситуациями, когда память начнет течь. То есть.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function mainFunction () {
  this.el =  0 ;
  this.elarray = [ { a: 11 , b: 22 , c: 0  }, { a: 111 , b: 222 , c: 1  }]
  var element = this.elarray [this.el];
  function function1 (el) {
    return function(event){
      alert(el);
    }
  }
}

document...onclick = mainFunction.function1(mainFunction.el);

Или el будет меняться после задания обработчика? Если да, то придется замыкать по первому варианту.
...
Рейтинг: 0 / 0
08.05.2009, 17:53
    #35977409
MaxPayne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
RAndrew, да, причем может многократно меняться за один сеанс работы с Web-приложением. Вот именно утечки памяти и опасаюсь..

ShSerge, к сожалению, Ваш вариант не работает.
...
Рейтинг: 0 / 0
08.05.2009, 17:58
    #35977417
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
RAndrew,

1) mainFunction.function1() функция не доступна из объекта
2) var забыл
3) если так хочется пожадничать, то заверни только то что надо, звать метод которому предается свойство того же объекта - как-то совсем неправильно
Код: plaintext
1.
2.
3.
4.
5.
  function function1 () {
    var el = this.el;
    return function(event){
      alert(el);
    }
  }
...
Рейтинг: 0 / 0
08.05.2009, 19:05
    #35977472
MaxPayne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
А может реализовать эту функцию как prototype? Тогда и обращаться можно будет через this
...
Рейтинг: 0 / 0
08.05.2009, 19:47
    #35977506
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
MaxPayneА может реализовать эту функцию как prototype? Тогда и обращаться можно будет через this
а я не знаю что он так намудрил, наверное ему это было зачем-то нужно :)
...
Рейтинг: 0 / 0
08.05.2009, 19:58
    #35977510
MaxPayne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
зы, просто я и спрашиваю, как лучше сделать. Но если реализовывать через prototype - будет ли возможность включить собственный обработчик событий?
...
Рейтинг: 0 / 0
08.05.2009, 20:40
    #35977534
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
Не совсем понятно, что надо получить? - Чтобы уметь вызывать методы/свойства другой функции? Или хочется создать метод-инициализатор, в котором собрать общедоступные свойства? - Первое нельзя без передачи экземпляра (ссылки), второе - не видно смысла, так как свойства можно просто вынести в зону общей видимости.
...
Рейтинг: 0 / 0
09.05.2009, 14:57
    #35977888
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
зыRAndrew,

1) mainFunction.function1() функция не доступна из объекта


Хух? Из какого объекта?
...
Рейтинг: 0 / 0
09.05.2009, 15:03
    #35977890
RAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
MaxPayneRAndrew, да, причем может многократно меняться за один сеанс работы с Web-приложением. Вот именно утечки памяти и опасаюсь..


Если это весь код работы с этим объектом, то ничего не потечет, если при задании обработчика замкнуть сразу this, он, на сколько я понял, не меняется, меняется только его содержимое. Единственное, что если будет создаваться новый объект и не раз ... = new mainFunction (), то и обработчик надо будет переопределять, либо удалять из очереди обработчиков.
...
Рейтинг: 0 / 0
10.05.2009, 00:10
    #35978074
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с this
RAndrewзыRAndrew,

1) mainFunction.function1() функция не доступна из объекта


Хух? Из какого объекта?
из mainFunction она не доступна, орел, в том виде как ты написал
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с this / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]