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)

dmitryck 14.06.2012 15:25

Как одной функции присвоить другую с параметрами без ее вызова
 
Собсно сабж такой.
Не могу понять возможно ли.

Нужно чтобы функция b() вызывала функцию a(1), а с() вызывала функцию a(2).

Но не вызывать a() в момент описания b() и c()

function a(s){
	alert (s)
}

b = a(1) // но тут разумеется уже вызывается a()
с = a(2)

b() // вызываться должно только тут
c() // и тут


Как это реализовать?
Подскажите..

9xakep 14.06.2012 15:29

function a(s){
	alert (s)
}

b = function () {
a(1) 
}// но тут разумеется уже вызывается a()

c = function () {
a(2)
}

b() // вызываться должно только тут
c() // и тут


Ну или так:
function a(s){
	return (s)
}

b = a(1) // но тут разумеется уже вызывается a()

c = a(2)

alert(b) // вызываться должно только тут
alert(c) // и тут

dmitryck 14.06.2012 15:32

угу. точн.
спасибо..)

lord2kim 14.06.2012 19:12

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 181430)
>IE8

уже не кроссбраузерно...

bes 15.06.2012 16:11

Функция в js - это представляющий её текст, поэтому этот текст можно присваивать любым переменным.
Не совсем то, что вы хотели, но можно и так.
var a = function (s){
  alert(s)
}
b = a;
b(3);

tadjik1 15.06.2012 16:48

всё в яваскрипте объект, кроме строки и числа. хотя, если подумать, то они тоже объекты))

tadjik1 15.06.2012 16:54

это шутка такая была вообще-то

я просто к тому, что простые типы тоже имеют обёртки вроде Number() или String(), которые позволяют им иметь методы. разве не так?

bes 15.06.2012 17:41

Цитата:

Сообщение от Maxmaxmахimus
и давно ли?

Вы можете говорить абстрактно объект и т.п., но функция хранится в виде текста (для работы дальше можно не ходить: в виде последовательности чисел, последовательности состояний битов памяти...), когда ставим круглые скобки () у имени переменной, в которой хранится текст функции, происходит её вызов, то есть интерпретатор начинает работать с текстом этой функции и выполнять заложенные в ней действия, не?
Да и вообще программирование в некотором приближении - это работа с текстом, что-то пишем, транслятор это разбирает, что-то получаем.

bes 15.06.2012 19:49

Maxmaxmахimus,
var a = function (s) {
  alert(s)
}

alert(a)

Про то, что с функцией можно работать как с объектом, конечно, также надо знать.

tadjik1 16.06.2012 13:39

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 181746)
в ecma 9 типов данных из них 6 доступны на уровне скрипта

1. причем тут екма?
2. в javascript знаю только 6 (null, undefined, string, boolean, number, object). в конечном счете даже примитивный тип можно назвать похожим на объект, так как у него есть методы (toLowerCase(), у строки). кроме того
var str = 'string';
str.prop = 11;

не выведет ошибку именно из-за того, что у примитивного типа "строка" есть обёртка в виду String().

короче предлагаю закрыть тему.

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 )

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

tadjik1 16.06.2012 20:29

ну не совсем так)
а вообще пример, который я привел, меня в замешательство прямо-таки сумел поставить. мой любимый, можно сказать)
кто скажет в чем дело получит плюсик в карму)

bes 16.06.2012 20:43

http://learn.javascript.ru/object-co...римитив

tadjik1 16.06.2012 22:34

максмакстампакс, извини, но не получается поставить тебе плюсик, вылазит сообщение (вы должны поставить оценку еще кому-нибудь, прежде чем...). bes'у поставил, а тебе не получается(

вообще да, классная особенность, рад, что понравилась)

tadjik1 16.06.2012 22:35

в общем-то и желания нет


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