Size: a a a

JavaScript Noobs — сообщество новичков

2020 July 15

И

Иван in JavaScript Noobs — сообщество новичков
Алексей
У меня по тому примеру вопрос именно в f. Если мы заменим на return f на return f(), не будет работать? (извините, если вопрос глупый =) ) я так понял здесь идет возврат функции как объект?
в JS функции — это first-class citizen. они могут быть присвоены переменным в качестве значения, могут быть переданы в качестве аргумента в другую функцию, они могут быть возвращены из функции. в твоём примере функция f возвращается из функции sum просто как функция
источник

И

Иван in JavaScript Noobs — сообщество новичков
Алексей
У меня по тому примеру вопрос именно в f. Если мы заменим на return f на return f(), не будет работать? (извините, если вопрос глупый =) ) я так понял здесь идет возврат функции как объект?
кстати, если будешь внимателен, то заметишь — функция f тоже возвращает функцию f
источник

A

Aleksandr in JavaScript Noobs — сообщество новичков
e
источник

А

Алексей in JavaScript Noobs — сообщество новичков
Какую именно роль играет toString в примере
источник

А

Алексей in JavaScript Noobs — сообщество новичков
Не очень понял
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Алексей
Какую именно роль играет toString в примере
просто перезапись метода, только имхо лучше это через прототип делать.
источник

А

Алексей in JavaScript Noobs — сообщество новичков
Еще не знаком с прототипом. Вот на этом примере застрял
источник

И

Иван in JavaScript Noobs — сообщество новичков
Алексей
Какую именно роль играет toString в примере
const a = sum(1) // f
const b = a(1) // f
const c = b(1) // f


сколько бы ты раз не вызывал результат вызова — ты получишь функцию f

чтобы получить реузльтат вычисления, используется трюк, который описан выше — alert под капотом делает примерно так:

function alert(arg) {
 if (typeof arg === ‘string’) {
   __show_alert(arg)
 } else {
   const string = arg.toString()
   __show_alert(string)
 }
}

переопределяя toString у функции f можно заставить эту ебанинку работать
источник

И

Иван in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
просто перезапись метода, только имхо лучше это через прототип делать.
через прототип? точно? чтобы ВСЕ функции так себя вели? зачем?
источник

A

Aleksandr in JavaScript Noobs — сообщество новичков
Ф.тустринг переопределит метод ту стринг только внутри этой функции?
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Иван
через прототип? точно? чтобы ВСЕ функции так себя вели? зачем?
это с хера ли?
источник

И

Иван in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
это с хера ли?
источник

И

Иван in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
это с хера ли?
потому что у всех функций один прототип)
источник

А

Алексей in JavaScript Noobs — сообщество новичков
Иван
потому что у всех функций один прототип)
А у вас какой опыт в js?
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Иван
потому что у всех функций один прототип)
__proto__ !== prototype
источник

И

Иван in JavaScript Noobs — сообщество новичков
Aleksandr
Ф.тустринг переопределит метод ту стринг только внутри этой функции?
он на самом деле ничего не переопределит. у функции f нет метода toString. он есть у прототипа всех функций. когда пишешь f.toString = …, ты добавляешь этот метод к функции f.

а js работает так, если ты обращаешься к obj.foo, то он сначала ищет foo у obj, если не находит, то ищет в его прототипе (obj.__proto__.foo), если не находит — ищет в прототипе прототипа (obj.__proto__.__proto__.foo) и так до тех пор, пока не закончатся прототипы или не будет найдено поле. при function f() {}; f.toString ты добавляешь поле самому объекту, поэтому интерпретатор не пойдёт искать в прототипы
источник

И

Иван in JavaScript Noobs — сообщество новичков
Алексей
А у вас какой опыт в js?
очень много времени провёл на learn.javascript.ru. и тебе советую
источник

И

Иван in JavaScript Noobs — сообщество новичков
Konstantin Sedykh
__proto__ !== prototype
да, __proto__ — это геттер/сеттер для prototype
источник

А

Алексей in JavaScript Noobs — сообщество новичков
Ну я оттуда и взял пример)
источник

KS

Konstantin Sedykh in JavaScript Noobs — сообщество новичков
Иван
да, __proto__ — это геттер/сеттер для prototype
нет
источник