Зачем нужен Object.prototype?

249
05 марта 2017, 08:11

Не могу понять, зачем в данной функции использовать Object.prototype для того, чтобы проверить input и определить String ли это? В чем разница использования Object.prototype.toString.call(input) и использования toString.call(input)?

var isString = function (input) {
    // Почему здесь используют Object.prototype,
    // когда можно просто использовать метод toString.call(input) ?
    if (Object.prototype.toString.call(input) === '[object String]') { 
        return true;
    } else {
        return false;
    }
}
console.log(isString('w3resource'));
console.log(isString([0, 1, 2, 4]));
console.log(isString({name: "Nureke", age: 24}));
Answer 1

Обычно, потомки переопределяют toString от объекта.
Это, в сущности, разные методы.

Например, Array.prototype.toString собирает элементы массива через запятую.
А Object.prototype.toString с помощью внутренних колдунств, определяет тип и выводит его в определённом формате.

Т. е. если нужно определить тип - берём метод прототипа объекта и, обязательно, устанавливаем this, без него объект не будет ожидаемо работать.

toString.call(input) === Object.prototype.toString, так что вызовы обычно эквивалентны (спасибо @Grundy за правку).
Однако, если кто-то сделает var toString = 42; в глобальной области, но будет плохо.

P. S. Зачем if? Сравнение уже возвращает булево значение.

READ ALSO
Запуск видео в iframe

Запуск видео в iframe

На сайте есть слайдер, который отображает видео, приходящее из сторонник сервисов (YouTube, vimeo), загружаемое в iframeМне нужно прокрутить слайдер...

490
Нужна помощь с ES6 модулями

Нужна помощь с ES6 модулями

Написал небольшую библиотеку и теперь пытаюсь перевести её на ES6 но и сделать версию для обычного использования, чтобы просто подключить...

272
Проблемы с элементом <track>

Проблемы с элементом <track>

Всем привет! Вообщем не могу понять как сделать так чтобы когда наводишь мышку на субтитры в видео, то они передаются в переменнуюИспользую...

263
Вывести клиенту правильное время

Вывести клиенту правильное время

В БД заношу время в формате time(), те

244