Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2014, 10:33
Новичок на форуме
Отправить личное сообщение для Kapalak Посмотреть профиль Найти все сообщения от Kapalak
 
Регистрация: 25.05.2014
Сообщений: 3

Непонятное поведение метода при добавлении во встроенный прототип
Здравствуйте. Недавно столкнулся с такой непоняткой. Допустим я хочу дописать свой метод в прототип Number. И тут столкнулся с непонятным для меня поведением.
Допустим есть такой код.
Number.prototype.myFunc = function(x) {
  alert('x = ' + x + '\nthis = ' + this);
}

Если записать вызов myFunc так
5..myFunc(1)

То всё работает так как и задумано - x равен 1, а this равен 5.
Но если вызвать метод так:
(5).myFunc(1)

То происходит абсолютно непонятная мне фигня - x становится равным 5, а this ссылается на window. А 1 вообще непонятно куда девается, в arguments ее вообще нет. Хотелось бы узнать что вообще происходит при втором варианте записи?
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2014, 11:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Kapalak, у меня все нормально работает http://learn.javascript.ru/play/iOdFZ
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 25.05.2014 в 11:36.
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2014, 11:11
Новичок на форуме
Отправить личное сообщение для Kapalak Посмотреть профиль Найти все сообщения от Kapalak
 
Регистрация: 25.05.2014
Сообщений: 3

Сообщение от nerv_ Посмотреть сообщение
Kapalak, у меня все нормально работает http://learn.javascript.ru/play
По этой ссылке ничего нет...
Вот мой пример: http://learn.javascript.ru/play/QdMbD
В лисе и хроме выводится x = 5, this = window
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2014, 11:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

Kapalak, лол. Точку с запятой ставить надо.
Number.prototype.myFunc = function(x) {
  alert('x = ' + x + '\nthis = ' + this);
}*!*;*/!*

(5).myFunc(1);

У тебя же получается:
Number.prototype.myFunc = function(x) {
  alert('x = ' + x + '\nthis = ' + this);
}(5).myFunc(1);

Т.е. функция создаётся и сразу вызывается с аргументом 5 в контексте window, а после, уже к возврату функцции(в данном случае undefined) пытается примениться несуществующий пока myFunc, естественно с ошибкой.
__________________
29375, 35

Последний раз редактировалось Aetae, 25.05.2014 в 11:28.
Ответить с цитированием
  #5 (permalink)  
Старый 25.05.2014, 11:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

коварный JavaScript
Ответить с цитированием
  #6 (permalink)  
Старый 25.05.2014, 11:36
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Kapalak
По этой ссылке ничего нет...
теперь есть Утро)

Сообщение от Octane
коварный JavaScript
кстати, нет. Коварный будет es6
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 25.05.2014 в 11:38.
Ответить с цитированием
  #7 (permalink)  
Старый 25.05.2014, 11:39
Новичок на форуме
Отправить личное сообщение для Kapalak Посмотреть профиль Найти все сообщения от Kapalak
 
Регистрация: 25.05.2014
Сообщений: 3

Сообщение от Aetae Посмотреть сообщение
Kapalak, лол. Точку с запятой ставить надо.
ОМГ!!! Мдааааа... Вот никак не могу приучить себя после фигурных скобок точки с запятой ставить. Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы textarea тянулась в высоту при добавлении в нее текста? javasc Общие вопросы Javascript 4 27.03.2012 22:14
Баг Firefox: по F5 перескакивает radio при динамическом добавлении в DOM input Atoll Events/DOM/Window 6 22.06.2010 18:25
Скролл окна при добавлении контента "сверху"" yaneblog Events/DOM/Window 0 22.01.2010 23:00
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 14:17
как при добавлении изображения на сервер считывать имя в БД? solomusic Серверные языки и технологии 3 12.06.2008 23:28