Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.09.2020, 08:48
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Object.prototype.toString
В документации приведена возможность использования метода Объекта toString(), для определения типа объекта:
var toString = Object.prototype.toString;

toString.call(new Date);    // [object Date]
toString.call(new String);  // [object String]
toString.call(Math);        // [object Math]

// Начиная с JavaScript 1.8.5
toString.call(undefined);   // [object Undefined]
toString.call(null);        // [object Null]


Об этом свойстве метода toString(), я честно говоря не знал, пока не наткнулся там же, в описании полифила метода масиива from() на такое вот условие для проверки что функция "вызываема":
var toStr = Object.prototype.toString;
    var isCallable = function(fn) {
      return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
    };



Вопрос собственно в чём: когда первое условие (typeof fn === 'function') может не сработать? Зачем расширили условие?
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2020, 06:34
Новичок на форуме
Отправить личное сообщение для Лоэнрон Посмотреть профиль Найти все сообщения от Лоэнрон
 
Регистрация: 24.07.2018
Сообщений: 8

Раз никто не отвечает - попробую я.
Меня данный вопрос тоже заинтересовал, но я не смог ничего нарыть.
По сути, начиная со спецификации 1997 года, typeof возвращает "function" для любого объекта с возможностью вызова
Цитата:
Object (native and
implements [[Call]])
https://www.ecma-international.org/p...pdf#sec-11.4.3

Потому, я предполагаю, учитывая, что данный фрагмент показан на сайте разработчиков, альтернатива дается исключительно с целью показать эту самую альтернативу. Чтобы показать все возможные способы.
Ответить с цитированием
  #3 (permalink)  
Старый 29.09.2020, 10:13
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Я не знал что typeof возвращает "function" для любого с возможностью вызова. Спасибо, это интересно.


Я тоже так и ничего не нашёл. Единственное что я нарыл, то это фраза "Вы не можете переопределить то, что возвращается из typeof". Направление наверное верное, но не понимаю смысл , так как результат метода call() тоже уже никак не переопределить.
Ответить с цитированием
Ответ



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

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