2013-05-28 5 views
-1

Так мне было интересно, что быстрее связывается или применяется? Есть ли конкретное доказательство (я сделал около часа, играя на jsperf, ответ ниже).Более быстрый способ заменить bind в javascript

+0

Что быстрее? Это две разные вещи! –

+0

2 вещи. Его смешно, что у меня есть -1 на мой вопрос и +2 на мой ответ ... Вторая вещь: Общепринято хотеть установить область для функции. лучше или лучше? есть ли альтернативы? Это была моя цель. – Michael

+0

'.apply()' и '.bind()' две разные вещи, хотя вы можете использовать '.apply()' как часть создания функции .bind() '-like. Возникающий вопрос имеет мало смысла. Я не знаю, почему вы ожидаете получить равные голоса по вашему вопросу и ответам, но ни один из них не подходит ... как говорят * «... для тех, кто слишком ленив, чтобы проверить jsperf ...» *, когда ответ должен быть таким, чтобы человек не нуждался в *, чтобы следовать ссылке, чтобы получить информацию. –

ответ

2

http://jsperf.com/apply-verses-bind/3

Как вы можете видеть, я провел несколько ситуаций, но оказывается, что упаковка функции и вызов функции объема является самым быстрым (примерно 2 раза быстрее, чем bind или apply).

Для тех, кто слишком ленив, чтобы проверить jsperf, вот результаты.

var myObject = { 
    count: 0, 
    fn: function() { 
     this.count += 1; 
    } 
}; 

var bindFn = myObject.fn.bind(myObject); 
var applyFn = (function(fn, scope) { 
    return function() { 
     fn.apply(scope, []); 
    } 
})(myObject.fn, myObject); 
var unboundFn = myObject.fn; 
var preBound = (function(fn, scope) { 
    return function() { 
     scope[fn](); 
    }; 
})('fn', myObject); 

preBound выигрывает примерно в 2 раза быстрее. Итак, я подумал о большом классе полезности.

return { 
    superBind: function(fn, scope) { 
     return function() { 
      scope[fn](); 
     } 
    } 
}; 

И бум, супер привязывать :)

+1

Итак ... Что это должно быть? Ответ на мгновенный вопрос, чтобы получить ответные точки или вы хотите, чтобы он был помечен как wiki сообщества? –

+0

@LightStyle: Автоответчик разрешен. Но вопрос очень низок. Эти «быстрее» часто бессмысленны и очень часто относятся к реализации и версии. –

+0

хорошо, так как я разрабатывал очень сложные приложения в javascript, я обнаружил, что функции 'bind' и' apply' используются в коде (особенно для обратных вызовов и наблюдаемых). Во-вторых, чтобы облегчить стиль, я не знал, что существует какой-либо другой способ. Я пошел задавать вопрос, решил провести исследование и нашел, что могу ответить сам. Поскольку это, по крайней мере, я считаю хорошим ответом на вопрос выше. Я сформулировал вопрос выше, чтобы быть простым и точным для ответа ниже. Если этого недостаточно, я могу это изменить. – Michael

Смежные вопросы