bind передача event и this одновременно
Подскажите пожалуйста, можно ли передать одновременно и параметр eventMouse и нужный мне контекст?
Поясню: //1 MyElement.ondrop = this.MyFunction function MyFunction(e){ console.log(e) // EventMouse } //2 MyElement.ondrop = this.MyFunction.bind(this) function MyFunction(e){ console.log(e) // Нужный мне контекст } А как мне сделать так, чтобы получить сразу и контекст и переменную события? |
пробросить явно его
<html> <head> </head> <body> <p id="p1" foo="bar">foo</p> <p id="p2" foo="bar">foo</p> <script> context1=function(){this.a=1} context2={a: 10} p1.onclick=function(e){with(new context1) with(this) {alert([e, a])}} p2.onclick=function(e){with(context2) with(this) {alert([e, a])}} </script> </body> </html> |
Но если я правильно понял, аргумент eventMouse вы так и не передали в функцию onclick
|
Цитата:
|
Спасибо огромное! То что нужно)
|
pornoborets,
Siend, посмотрите код ниже, если он неправильный, как его правильно решить без with? <!DOCTYPE HTML> <html> <head> </head> <body> <p id="p1" foo="bar">foo</p> <p id="p2" foo="bar">foo</p> <script> var context1=function(){this.a=1} var context2={a: 10} var fn = function(e){alert([e,this.a, e.target])} p1.onclick = fn.bind(new context1); p2.onclick = fn.bind(context2); </script> </body> </html> |
рони,
У тебя тут не связан контекст самого элемента. <!DOCTYPE HTML> <html> <head> </head> <body> <p id="p1" foo="bar">foo</p> <p id="p2" foo="bar">foo</p> <script> var context1=function(){this.a=1} var context2={a: 10} var fn = function(e){try{alert(this.getAttribute("foo"))}catch(e){alert(e)}} p1.onclick = fn.bind(new context1); p2.onclick = fn.bind(context2); </script> </body> </html> тут вообще говоря, существует тьма чрезжопных решений, можно пропихивать кусками через замыкания, через call/apply/bind, только все это не нужно. |
pornoborets,
а вы могли бы показать вариант без with? |
рони,
Я же говорю, нормальных решений я не вижу. Только кусковым методом. e.g. <!DOCTYPE HTML> <html> <head> </head> <body> <p id="p" foo="bar">foo</p> <script> p.onclick=function(o){ return function(){alert([o.a, this.getAttribute("foo")])} }({a: 1}) </script> </body> </html> |
pornoborets,
ок, спасибо и за это! |
Часовой пояс GMT +3, время: 03:09. |