Нет, это не идентично.
С bind вы создаете функцию , ничего не вызывая.С call
- как в вашем obj.method.call(obj, 'hello')
- вы фактически вызываете метод.
"идентичным" выражением obj.method.bind(obj, 'hello')
будет function(){obj.method.call(obj, 'hello')}
.Это больше глупости.И это то, что ES5 пытается обеспечить удобство.
Есть и исторические причины для введения bind
;впервые он стал популярен как один из вспомогательных методов в Prototype.js несколько лет назад.Затем попал в другие популярные библиотеки, такие как underscore.js.ES5 просто следовал тому, что уже было популярно и востребовано.