Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2017, 20:56
Интересующийся
Отправить личное сообщение для Маленький программист :"3 Посмотреть профиль Найти все сообщения от Маленький программист :"3
 
Регистрация: 26.12.2016
Сообщений: 20

Привязка контекста. bind.
Я может немного переучился, но решил повторить bind и что-то не понял, откуда этот код:
function sayHi() {}
var f = sayHi.bind( {name: "Вася"} );
document.write( f.name );

Берет вот эту строку: "bound sayHi".
Прошу пояснить.
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2017, 23:18
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Маленький программист :"3, func.bind() создает функцию с именем "bound "+func.name
Ответить с цитированием
  #3 (permalink)  
Старый 07.02.2017, 02:14
Аспирант
Отправить личное сообщение для fuckingquest Посмотреть профиль Найти все сообщения от fuckingquest
 
Регистрация: 28.10.2016
Сообщений: 70

Сообщение от Rise
создает функцию с именем "bound "+func.name
мда, сейчас поэксперементировал ради интереса. Не всегда имя берет.

Там вообще черт знает какие правила:

<html>
      <body>
         <script>
            window.one = function(){}
            two = function(){}
            var three = function(){}
            foo = one.bind(window)
            bar = two.bind(window)
            baz = three.bind(window)
 
             console.log(foo.name, bar.name, baz.name)

         </script>
      </body>
    </html>

выводит bound bound two bound three

хотя, window.someVariable = someObject должно быть эквивалентно someVariable = someObject

У дезигнеров жаваскрипта, по ходу, очередной приступ дезигна головного мозга, сука

Причем, по сути, эквивалентный код
<body>
         <script>
            window.one = new Function
            two = new Function
            var three = new Function
            foo = one.bind(window)
            bar = two.bind(window)
            baz = three.bind(window)
 
             console.log(foo.name, bar.name, baz.name)

         </script>
      </body>
    </html>

Выводит совершенно другую хуйню
bound anonymous bound anonymous bound anonymous

Но тут хоть все логично, блеать,так оно и должно быть

UPD разгадал тайну запила этих дегенератов.
Когда создается с понтом "анонимная ф-ция", в выражениях типа myVar = function(){} или var myVar = function(){}, ей автоматом навешивается имя. Где тут логика, хз.

<html>
      <body>
         <script>
            one = function(){}
            two = one
            console.log(one.name, two.name) // one one

         </script>
      </body>
    </html>


ЗЫ тестил в хроме, другие реализации хз как себя ведут

Последний раз редактировалось fuckingquest, 07.02.2017 в 02:33.
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2017, 05:32
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Сообщение от fuckingquest Посмотреть сообщение
Не всегда имя берет.
Таки берет, но имя может быть пустым.
Сообщение от fuckingquest Посмотреть сообщение
Там вообще черт знает какие правила
В спецификации весь алгоритм описан.
Сообщение от fuckingquest Посмотреть сообщение
тестил в хроме, другие реализации хз как себя ведут
В Firefox есть баг на тему "автоматом навешивается имя" в 53 версии должны исправить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопки удаляются, а bind остается snnwolf ExtJS 6 19.07.2016 11:54
Почему не работают условия в bind? khusamov ExtJS 2 17.06.2015 01:06
Связанный (bind) компонент зависит от валидности формы khusamov ExtJS 12 07.06.2015 17:00
Два контекста в контексте onload kostyanet Events/DOM/Window 6 03.01.2014 10:15
bind, delegate,live Arkinsstoun jQuery 6 21.01.2012 19:53