Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   В чем отличие bind от call и apply? (https://javascript.ru/forum/events/34629-v-chem-otlichie-bind-ot-call-i-apply.html)

platedz 12.01.2013 23:26

В чем отличие bind от call и apply?
 
Подскажите, пожалуйста. Буду крайне признателен, а то сам не разобрался.

nerv_ 13.01.2013 01:16

Цитата:

Сообщение от platedz
call и apply

вызывают функцию в контексте с параметрами,
Цитата:

Сообщение от platedz
bind

привязывает контекст вызова с параметрами

platedz 13.01.2013 06:12

Понял спасибо.

jekahm 07.04.2013 00:52

Цитата:

Сообщение от nerv_ (Сообщение 226931)
вызывают функцию в контексте с параметрами,

привязывает контекст вызова с параметрами

Уважаемый nerv, а не могли бы Вы обьяснить, когда именно используется call (apply) и когда bind? И, если есть такая возможность, приведите, пожалуйста, небольшие примеры их использования, чтобы можно было уловить основную суть и разницу между ними! А то уже какой день голову ломаю, но никак не могу понять!
Заранее Вам благодарен!

Aetae 07.04.2013 05:45

bind нужен скорее для того, чтобы не использовать постоянно call и сам по себе легко эмулируется.
Например можно написать так:
id = document.getElementById.bind(document);

А дальше просто использовать
id('some-id');
вместо постоянного
id.call(document,'some-id');


Кстати в ie это магическим образом работает более чем в 2 раза быстрее чем просто
document.getElementById('some-id')
. 0_о

danik.js 07.04.2013 05:50

Цитата:

Сообщение от Aetae
Кстати в ie это магическим образом работает более чем в 2 раза быстрее чем просто

Да прям) Почему ж тогда во всяких jquery не используют?

Aetae 07.04.2013 05:56

Цитата:

Сообщение от danik.js (Сообщение 244609)
Да прям) Почему ж тогда во всяких jquery не используют?

Только в ie ибо.
http://jsperf.com/getelementbyid-vs-queryselector/33

cyber 07.04.2013 13:14

jekahm, http://learn.javascript.ru/bind

jekahm 07.04.2013 14:47

Есть еще вопрос! Почему в примере ниже (я нашел его на этом сайте) для метода double bind используется, а для sum - нет?


function Example(x, y){
  this.x = x;
  this.y = y;
};
Example.prototype.sum = function(){
  return this.x + this.y;
};
Example.prototype.double = function(){
// Вместо for(var key in this) if(this.hasOwnProperty(key)) ...
  Object.keys( this )
// Получаем массив, к которому и применяем новые методы
        .forEach( function( key ){
// this "потерялся" бы, но...
          this[ key ] = this[ key ] * 2;
// У функций тоже есть новое
        }.bind(this) );
  return this;
};
 
var example = new Example(3, 7);
alert( example.sum() );
example.double();
alert( example.sum() );

danik.js 08.04.2013 02:15

Цитата:

Сообщение от jekahm
Есть еще вопрос! Почему в примере ниже (я нашел его на этом сайте) для метода double bind используется, а для sum - нет?

То есть ты хочешь сказать, что если какая-то функция используется в одном методе прототипа, то ее обязательно использовать в остальных методах? Хах, как можно додуматься до такой шизанутой идеи)))
Логичным был бы вопрос - зачем использовать функцию bind в методе double.
Но ведь ответ дан в комментариях. Почитай про this в javascript (об этом уже много написано) чтобы не задавать такие вопросы.


Часовой пояс GMT +3, время: 20:29.