Непонятное поведение метода при добавлении во встроенный прототип
Здравствуйте. Недавно столкнулся с такой непоняткой. Допустим я хочу дописать свой метод в прототип 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 ее вообще нет. Хотелось бы узнать что вообще происходит при втором варианте записи? |
Kapalak, у меня все нормально работает http://learn.javascript.ru/play/iOdFZ
|
Цитата:
Вот мой пример: http://learn.javascript.ru/play/QdMbD В лисе и хроме выводится x = 5, this = window |
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, естественно с ошибкой. |
коварный JavaScript :D
|
Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 19:20. |