Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   во какая хретататень получилась :) (https://javascript.ru/forum/offtopic/25052-vo-kakaya-khretataten-poluchilas.html)

devote 23.01.2012 23:36

во какая хретататень получилась :)
 
Function.prototype.toString = function() {
    return this();
}

var greeting = function() {
    return "hello";
}

alert( greeting + "!" );

ЗЫ. Автор не я! В твитере Ben Alman написал

Gvozd 24.01.2012 02:01

Ичо?

devote 24.01.2012 02:38

Цитата:

Сообщение от Gvozd
Ичо?

Да ничо!

Gvozd 24.01.2012 02:46

Тем не менее.
Что интересного в этом коде, по вашему мнению, что вы его тут опубликовали?
ну, кроме того, что он выдаст ошибку на первой же функции возвращающей объект, например?

FINoM 24.01.2012 05:20

devote, ну вот блин, отобрал у меня 30 минут жизни. Из кодобреда придумал еще вот:
Number.prototype.toString = function(){alert('getter'); return this;}
alert(new Number(1));
Только я вот не понимаю, почему не работает с атомарными типами.
Number.prototype.valueOf = function(){alert('getter'); return this;}
alert(new Number(1) + 3);
Вот еще немножечко бреда.

FINoM 24.01.2012 05:24

Цитата:

Сообщение от Gvozd
ну, кроме того, что он выдаст ошибку на первой же функции возвращающей объект, например?

Это легко проверяется.

monolithed 24.01.2012 08:44

Цитата:

Сообщение от Gvozd
ну, кроме того, что он выдаст ошибку на первой же функции возвращающей объект, например?

так не выдаст, но практического применения нуль:

Function.prototype.toString = function() {
    return this();
}

var greeting = function() {
    return this;
}

alert(greeting.prototype.constructor());

Tim 24.01.2012 08:58

Цитата:

Только я вот не понимаю, почему не работает с атомарными типами.
возможно для них используется функция String() а не метод toString объектов Number и String.

Gvozd 24.01.2012 11:30

Цитата:

Сообщение от FINoM
Это легко проверяется.

вопрос был о том, чем он еще отличается.
то что ошибку выдаст я и так в курсе.

Gozar 24.01.2012 11:44

А ещё можно вот так написать:
Function.prototype.constructor.toString = function() {
    return this();
}

var greeting = function() {
    return "hello";
}

alert( greeting + "!" );


В этом коде тоже много букав ;)


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