<! Doctype html> <html> <head> <meta charset = "utf-8"> <style> кнопка {фоновое цвета:#0f0;} </style> </head> <body> <button Id = "Кнопка"> Кнопка </utting> <input type = "text"> <cropplect> document.getelementbyid (кнопка "); {alert (this.id); // кнопка всплывающего окна}; // Это в контексте можно рассматривать как кнопку </script> </body> </html>Присоединяйтесь к Bind
Кода -копия выглядит следующим образом:
var text = document.getElementbyId ("text");
var button = document.getElementById ("кнопка");
button.onclick = function () {
предупреждение (this.id); // кнопка всплывающей окна
} .bind (text);
// это в контексте можно рассматривать как кнопку
В настоящее время вы обнаружите, что это изменилось на текст
Это также применимо в функциональных литералах, с целью поддержания направления вверх и вниз (это) неизменным.
var obj = {color: "#ccc", element: document.getElementbyId ('text'), events: function () {document.getElementbyId ("button"). addEventListener ("click", function (e) {console.log (this); this.element.style.color = this.color; {this.events ();}}; obj.init ();В настоящее время нажатие на кнопку текст изменит цвет. Видно, что это не кнопка, а OBJ.
Метод bind () не применим в IE, 6, 7, 8. Необходимо расширить этот метод путем расширения прототипа функции.
if (! function.prototype.bind) {function.prototype.bind = function (obj) {var slice = [] .slice, args = slice.call (аргументы, 1), self = this, nop = function () {}, bound = function () {return self.apply (этот экземпляр nop? {}), args.concat (slice.call (аргументы)));}; nop.prototype = self.prototype; bound.prototype = new nop (); return bound;};}В настоящее время вы можете видеть, что Bind () также поддерживается в IE6, 7 и 8.
Кода -копия выглядит следующим образом:
slice = array.prototype.slice,
или
array = array.prototype.slice.call (массив, 0);
Преобразовать массив в массив