Вот вопрос в JavaScript ниже:
// Tested via Google Chrome console.
var toString = Object.prototype.toString;
"foo".toString(); // "foo"
toString.call("foo"); // [object String]
[].toString(); // ""
toString.call([]); // [object Array]
{}.toString(); // syntax error
toString.call({}); // [object Object]
Почему результат toString отличается от toString.call()?
ОБНОВЛЕНО
String.prototype.toString.call("foo"); // "foo"
Object.prototype.toString.call("foo"); // [object String]
Является ли String.prototype.toString не цепочкой прототипов, как показано ниже?
toString в String [не найден] → toString в String.prototype [не найден]
--> toString in Object.prototype[found]