Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как одной функции присвоить другую с параметрами без ее вызова (https://javascript.ru/forum/misc/29092-kak-odnojj-funkcii-prisvoit-druguyu-s-parametrami-bez-ee-vyzova.html)

bes 16.06.2012 14:31

Функция хранится в переменной в виде текста, вот что я хотел сказать и потом пояснил, за ту неточность пардон.

bes 16.06.2012 15:12

Ладно, Maxmaxmахimus, покажи мастер-класс: какими словами (только нормальными, без сленга) описать результат вывода alert-а в этом примере?

var a = function (s) {
  alert(s)
}

alert(a)

melky 16.06.2012 16:58

Цитата:

Сообщение от bes
Функция хранится в переменной в виде текста,

http://es5.javascript.ru/x13.html#x13.2
Цитата:

объект типа Function создаётся следующим образом:
1. Создать новый родной объект ECMAScript. Пусть F будет этим объектом.
....
3. Внутреннему свойству [[Class]] для F присвоить "Function".
....
6. Установить внутреннее свойство [[Call]] для F, как описано в пункте 13.2.1.
....
20. Вернуть F.
Она хранится как вызываемый объект со специальным типом.

bes 16.06.2012 18:28

Maxmaxmахimus, не кодом.

Цитата:

Сообщение от melky
Она хранится как вызываемый объект со специальным типом.

Здесь логика понятна: раз объект, значит и хранится как объект.
Как правильно на словах обосновать текст функции, выводимый в alert()

tadjik1 16.06.2012 18:37

bes,
alert это тоже метод глобального объекта, который при вызове приводит переданное ему значение к строке. объекты приводятся к строке путём вызова метода toString(). выше максмакстампакс показал как можно, переопределив этот метод изменить поведение alert().

bes 16.06.2012 18:40

ок, всё встало на свои места, tadjik1, спасибо

bes 16.06.2012 18:51

здесь + приводит к строке

bes 16.06.2012 18:53

alert(  typeof (function (){} + function (){}) )

tadjik1 16.06.2012 19:54

var a = new Boolean(false);
if(a) alert(a);

bes 16.06.2012 20:04

function q (){}
q.valueOf = function(){
  return true
}

function w (){}
w.valueOf = function(){
  return false
}


alert( q + w )

Далее можно не продолжать


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