Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2013, 23:26
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

В чем отличие bind от call и apply?
Подскажите, пожалуйста. Буду крайне признателен, а то сам не разобрался.
Ответить с цитированием
  #2 (permalink)  
Старый 13.01.2013, 01:16
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от platedz
call и apply
вызывают функцию в контексте с параметрами,
Сообщение от platedz
bind
привязывает контекст вызова с параметрами
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 13.01.2013, 06:12
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Понял спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2013, 00:52
Новичок на форуме
Отправить личное сообщение для jekahm Посмотреть профиль Найти все сообщения от jekahm
 
Регистрация: 04.10.2012
Сообщений: 5

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

привязывает контекст вызова с параметрами
Уважаемый nerv, а не могли бы Вы обьяснить, когда именно используется call (apply) и когда bind? И, если есть такая возможность, приведите, пожалуйста, небольшие примеры их использования, чтобы можно было уловить основную суть и разницу между ними! А то уже какой день голову ломаю, но никак не могу понять!
Заранее Вам благодарен!
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2013, 05:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

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

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


Кстати в ie это магическим образом работает более чем в 2 раза быстрее чем просто
document.getElementById('some-id')
. 0_о
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 07.04.2013, 05:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Aetae
Кстати в ie это магическим образом работает более чем в 2 раза быстрее чем просто
Да прям) Почему ж тогда во всяких jquery не используют?
Ответить с цитированием
  #7 (permalink)  
Старый 07.04.2013, 05:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Сообщение от danik.js Посмотреть сообщение
Да прям) Почему ж тогда во всяких jquery не используют?
Только в ie ибо.
http://jsperf.com/getelementbyid-vs-queryselector/33
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 07.04.2013, 13:14
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

jekahm, http://learn.javascript.ru/bind
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #9 (permalink)  
Старый 07.04.2013, 14:47
Новичок на форуме
Отправить личное сообщение для jekahm Посмотреть профиль Найти все сообщения от jekahm
 
Регистрация: 04.10.2012
Сообщений: 5

Есть еще вопрос! Почему в примере ниже (я нашел его на этом сайте) для метода 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() );
Ответить с цитированием
  #10 (permalink)  
Старый 08.04.2013, 02:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
apply и call. В чём отличия? B~Vladi Оффтопик 49 24.09.2009 10:35