![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
Всем привет
Не пойму, почему работает у автора эта строка: function () { $this[config.effect](config.speed);} config.effect - это строка и туда придет строчный литерал.
Это сообщение отредактировал(а) pasha4ur - 13.10.2014, 19:48 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
А что удивляет? Все сущности в JS - объекты. К объектам есть литеральный доступ, через точку и "массивный", через "вырезку". Так оно устроено.
Это сообщение отредактировал(а) ksnk - 14.10.2014, 11:28 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
Это я знаю.
проблема в том, что в $this[config.effect] лежит строка 'slideToggle'. Как ее можно вызывать? Это все равно, что написать
моя не понимать этого ![]() Это сообщение отредактировал(а) pasha4ur - 14.10.2014, 17:02 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
pasha4ur, в JS у всех полей объектов есть имена. Фактически - ассоциативный массив. И да, JS - это интерпретатор он весь состоит из одного большого евала
![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 2 Всего: 13 |
||||
|
||||
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
_zorn_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Нет
$this[config.effect](config.speed); === $this['slideToggle'](config.speed); === $this.slideToggle(config.speed); |
|||
|
||||
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
А почему нельзя сделать так?
$this.config.effect(config.speed) "$this['slideToggle'](config.speed);" В объекте contactForm нет же свойства с названием 'slideToggle' |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 2 Всего: 13 |
Нельзя потому что "точка" это доступ к полям объекта. $this.config.effect - это дуступ к полю effect переменной config внутри объекта $this. Выполняется слева на право. $this = { config: { effect: 'asdf' }, asdf: true }; $this.config.effect // asdf $this[$this.config.effect] // true, == $this['asdf'] == $this.asdf
Ну так $this это же не объект contactForm ![]() |
|||
|
||||
_zorn_ |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
$this.config.effect - не метод (функция), а просто строка. Ее нельзя вызвать. Если только таким извратом
но зачем ?
Теперь $this - это jQuery обертка contactForm у которой есть метод slideToggle. |
||||||
|
|||||||
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
Получается, что по этому текстовому ключу ['slideToggle'] мы вызываем метод в объекте обертке $(this).
Забыл про строку var $this = $(this) Это сообщение отредактировал(а) pasha4ur - 20.1.2015, 21:01 |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 2 Всего: 13 |
Вприниципе да. По этому текстовому ключу мы получаем доступ к методу который и вызываем. Метод есть под этим ключем потому что обертка $(this). Все верно, да 2 месяца - это довольно долго что бы это понять ![]() |
|||
|
||||
pasha4ur |
|
|||
![]() дизайнер Профиль Группа: Участник Сообщений: 7 Регистрация: 23.8.2009 Где: Украина Репутация: нет Всего: нет |
Я просто случайно вспомнил, решил зайти и разобраться. Нужно было мне внимательнее код читать. Спасибо всем за терпение.
Я это время не занимался js (он мне и не особо понравился из-за своей кривости + книга нудная была (подробное руководство)). Прочитал книгу по WP, немного поэкспериментировал с убунту(вернулся в виндовс). Сейчас вот начал читать книгу по PHP, от которого меня все стратсно отговаривают в сторону руби, питона и джавы (только вакансий джунов по ним вообще в моей области нет). Это сообщение отредактировал(а) pasha4ur - 23.1.2015, 00:01 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |