<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> button {background-color:#0f0;} </style> </head> <body> <button id="button"> 按钮 </button> <input type="text"> <script> var button = document.getElementById("button"); button.onclick = function() { alert(this.id); // 弹出button }; //可以看出上下文的this 为button </script> </body> </html>
Jetzt binden beitreten
An dieser Stelle werden Sie feststellen, dass sich dies in Text ändert
Dies gilt auch für Funktionsliterale. Der Zweck besteht darin, die Auf- und Abwärtsrichtung (dies) unverändert zu lassen.
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; }.bind(this)) return this; }, init: function() { this.events(); } }; obj.init();
Wenn Sie auf die Schaltfläche klicken, ändert sich die Farbe des Texts im Text. Es ist ersichtlich, dass es sich hierbei nicht um eine Schaltfläche, sondern um ein Objekt handelt.
Die bind()-Methode ist in IE, 6, 7 und 8 nicht anwendbar. Diese Methode muss durch Erweiterung des Funktionsprototyps erweitert werden.
if (!Function.prototype.bind) { Function.prototype.bind = function(obj) { var slice = [].slice, args = slice.call(arguments, 1), self = this, nop = function() { }, bound = function() { return self.apply(this instanceof nop ? this : (obj || {}), args.concat(slice.call(arguments))); }; nop.prototype = self.prototype; bound.prototype = new nop(); return bound; }; }
Zu diesem Zeitpunkt können Sie sehen, dass bind() auch in ie6, 7 und 8 unterstützt wird.