วันนี้ฉันยังคงศึกษาการใช้งานฟังก์ชั่นการผูกและยังได้เรียนรู้คำแถลงของ Shim และ Polyfill ตอนนี้มาสรุปกันเถอะ
if (! function.prototype.bind) {function.prototype.bind = function (othis) {ถ้า (typeof this! == "function") {// สิ่งที่ใกล้เคียงที่สุดกับ eCmascript 5 ฟังก์ชั่น Iscallable } var aargs = array.prototype.slice.call (อาร์กิวเมนต์, 1), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.apply - fnop.prototype = this.prototype; fbound.prototype = new fnop (); กลับ fbound; -นี่คือการดำเนินการในเอกสารอย่างเป็นทางการ ฉันจะพูดถึงสิ่งที่ฉันต้องการจะพูดในสองด้าน
อย่างแรกคือพารามิเตอร์การใช้ agruments
var aargs = array.prototype.slice.call (อาร์กิวเมนต์, 1) นี่คือการถอดพารามิเตอร์อาร์เรย์ของฟังก์ชันการผูก พารามิเตอร์แรกไม่ได้ (นั่นคือไม่มี Othis) ซึ่งเป็นวัตถุที่จะผูกพันกับวิธีการและที่สองคือ
aargs.concat (array.prototype.slice.call (อาร์กิวเมนต์))); ที่นี่เราใช้วิธีอาร์เรย์แทรกพารามิเตอร์ที่อยู่ด้านหลังอาร์เรย์พารามิเตอร์ โปรดทราบว่าฟังก์ชั่นนี้จะถูกส่งคืนและดำเนินการ อาร์เรย์พารามิเตอร์ของมันคืออาร์เรย์พารามิเตอร์ของฟังก์ชัน fbound ที่ส่งคืนดังนั้นอาร์เรย์พารามิเตอร์ด้านบนและล่างจะแตกต่างกันเช่นแกงกะหรี่เล็กน้อย
ประการที่สองคือบริบทที่การเปลี่ยนแปลงบริบทยากที่จะเข้าใจ ฟังก์ชั่นการผูกส่วนใหญ่จะใช้เพื่อผูกบริบท
ftobind = นี่คือบริบทของวัตถุตามด้วยวิธีการใช้ด้านล่างเพื่อให้วัตถุถูกผูกไว้เพื่อใช้บริบท
fnop.prototype = this.prototype;
fbound.prototype = new fnop ();
ที่นี่ FNOP ใช้เป็นตัวกลางไปยัง Fbound เพื่อให้แน่ใจว่า Fbound จะถูกดำเนินการในบริบทเมื่อมีการกำหนด แต่เดิม
bound.prototype = self.prototype สามารถรวมแอตทริบิวต์ดั้งเดิม แต่ด้วยวิธีนี้แอตทริบิวต์วัตถุทั้งสองชี้ไปยังสถานที่เดียวกันการปรับเปลี่ยน bound.prototype จะทำให้ self.prototype เปลี่ยนไปซึ่งไม่ใช่ความตั้งใจดั้งเดิมของเรา ดังนั้นการเปลี่ยนแปลงผ่านฟังก์ชั่นที่ว่างเปล่า NOP สามารถป้องกันไม่ให้สถานการณ์นี้เกิดขึ้นได้อย่างมีประสิทธิภาพ
บทความข้างต้นเกี่ยวกับการใช้งานฟังก์ชั่นการผูกอย่างง่ายใน JS ดั้งเดิมคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น