метод bind или обычное замыкание?
возьмем вот такой код:
<html> <body> <div>my text</div> <script type="text/javascript"> function clk(e, flag) { console.log(this); console.log(e); flag = !flag; console.log(flag); } var div = document.querySelector('div'); div.onclick = clk.bind(div, false); </script> </body> </html> кликнув по div'у я заметил 2 минуса: 1. не нашел объект event который какбэ должен быть; 2. значение флага к большому сожалению не сохраняется(( и есть старое доброе обычное замыкание: <html> <body> <div>my text</div> <script type="text/javascript"> var div = document.querySelector('div'); div.onclick = function (flag) { return function (e) { console.log(this); console.log(e); flag = !flag; console.log(flag); }; }(false); </script> </body> </html> которое отрабатывает на ура. я на сегодняшний день пришел к выводу, что bind не всегда хорош.. если меня не переубедят в обратном ;) п.с. тестил в хроме |
Цитата:
Цитата:
|
Цитата:
|
var obj = {}; obj = !obj; alert(obj); ;) |
Octane, я не об этом. поклацай в 1 и 2 примере несколько раз. и увидишь разницу. в первом будет постоянно идти true, т.к. flag не сохраняется. а во втором будет сохраняться
|
В простых случаях обычно не заморачиваюсь и делаю так:
<script> document.onclick = function click(e){ console.log(this); console.log(e); click.flag = !click.flag; console.log(click.flag); }; </script> А bind предназначен совсем для иного.) |
Aetae, как вариант))
|
кстати, меня сбили с толку ))
бывают случаи когда нужны дефолтные значения: div1.onclick = fun.bind(div1, 'black', 43); div2.onclick = fun.bind(div2, 'red', 27); ... |
bind ненужОн :D
function fun(event) { event.currentTarget; //-> div1 или div2 this.color; this.count; } div1.addEventListener('click', { color: 'black', count: 43, handleEvent: fun }); div2.addEventListener('click', { color: 'red', count: 27, handleEvent: fun }); |
skrudjmakdak, так аргументы ж - наоборот. Сначала забинденные, потом те, которые при вызове передаются:
<html> <body> <div>my text</div> <script type="text/javascript"> function clk(flag, e) { console.log(this); console.log(e); flag = !flag; console.log(flag); } var div = document.querySelector('div'); div.onclick = clk.bind(div, false); </script> </body> </html> Но, конечно, значение переменной при таком использовании менять нельзя. |
Часовой пояс GMT +3, время: 04:18. |