ใช้ () นิยามวิธีการ
วิธีการใช้งาน () ของฟังก์ชันและวิธีการโทรมีฟังก์ชั่นเดียวกัน แต่ความแตกต่างคือพารามิเตอร์ที่ได้รับแตกต่างกัน
วิธีการใช้ () ได้รับพารามิเตอร์สองตัวหนึ่งคือวัตถุและอีกวิธีหนึ่งคืออาร์เรย์ของพารามิเตอร์
ใช้ () ฟังก์ชั่น
1. ใช้เพื่อขยายขอบเขตของฟังก์ชัน
ตัวอย่าง:
var color = 'red'; var o = {color: 'blue'}; function sayscolor () {console.log (this.color);} saycolor (); // "สีแดง" saycolor.apply (o); // "สีน้ำเงิน"ที่นี่ฟังก์ชั่นจะถูกผูกไว้กับวัตถุ o แบบไดนามิกผ่านวิธีการใช้ () ในเวลานี้ชี้ไปที่วัตถุ O และได้รับผลลัพธ์ "สีน้ำเงิน"
2. วัตถุไม่จำเป็นต้องมีความสัมพันธ์กับการมีเพศสัมพันธ์กับวิธีการใด ๆ
มายกตัวอย่างการมีเพศสัมพันธ์ด้านล่างเพื่อดูวิธีการแก้ข้อต่อนี้โดยการสมัคร
var color = 'red'; var o = {color: 'blue'}; function sayscolor () {console.log (this.color);} o.saycolor = saycolor; o.saycolor (); // "สีน้ำเงิน"ที่นี่ฟังก์ชั่นจะถูกวางไว้เป็นครั้งแรกในวัตถุ O และวัตถุและวิธีการเชื่อมโยงกันอย่างใกล้ชิดและการเรียกวิธีการจะต้องผ่านวัตถุ o
มันไม่ยืดหยุ่นเท่ากับการใช้ () และวิธีการโทร ()
refactor รหัสข้างต้นเพื่อรับรหัสในตัวอย่างก่อนหน้า
var color = 'red'; var o = {color: 'blue'}; function sayscolor () {console.log (this.color);} saycolor (); // "สีแดง" saycolor.apply (o); // "สีน้ำเงิน"ไม่มีวิธีที่ผูกไว้กับวัตถุที่นี่ แต่เมื่อจำเป็นต้องใช้ให้ใช้วิธีการใช้งานหรือวิธีการโทรของฟังก์ชั่นเพื่อเชื่อมโยงแบบไดนามิก
ไม่มีการมีเพศสัมพันธ์ระหว่างวัตถุและวิธีการ ที่นี่สามารถทำได้ผ่านวิธีการ BIND () ที่ ES5 จัดทำขึ้น
3. ใช้การถ่ายโอนพารามิเตอร์พารามิเตอร์ตัวแปร
ฟังก์ชั่นต่อไปนี้เพื่อคำนวณค่าเฉลี่ยของจำนวนใด ๆ
ค่าเฉลี่ย (,,); ค่าเฉลี่ย (); เฉลี่ย (,,,,,,); เฉลี่ย (,,,,,,); เฉลี่ย (,,,,,,,);););
ฟังก์ชั่นเฉลี่ยเป็นตัวอย่างที่เรียกว่าพารามิเตอร์ที่ไม่แน่นอนหรือฟังก์ชั่นองค์ประกอบที่ไม่แน่นอน (จำนวนองค์ประกอบของฟังก์ชันหมายถึงจำนวนพารามิเตอร์ที่ต้องการ)
แน่นอนฟังก์ชั่นนี้สามารถเขียนในรูปแบบของอาร์เรย์ที่ได้รับ
ค่าเฉลี่ย fofarray ([,,]); ค่าเฉลี่ย fofarray ([]); ค่าเฉลี่ย fofarray ([,,,,,,,,2s]); ค่าเฉลี่ย fofarray ([,,,,,,,,,,2s]);
ฟังก์ชั่นที่ใช้พารามิเตอร์ตัวแปรนั้นกระชับและสง่างามมากขึ้น ฟังก์ชั่นพารามิเตอร์ตัวแปรมีไวยากรณ์ที่สะดวกอย่างน้อยก็อนุญาตให้ผู้โทรทราบล่วงหน้าว่ามีพารามิเตอร์จำนวนเท่าใด
ถ้าฉันมีอาร์เรย์แบบนี้
คะแนน var = getAllScores ();
วิธีการคำนวณค่าเฉลี่ยโดยใช้ฟังก์ชันเฉลี่ย?
1. เวอร์ชันฟังก์ชันพารามิเตอร์ตัวแปร
ในเวลานี้สามารถใช้ร่วมกับวิธีการสมัคร () เนื่องจากฟังก์ชั่นไม่ได้ใช้การอ้างอิงตัวแปรนี้เราจึงส่งค่า null สำหรับพารามิเตอร์แรก รหัสมีดังนี้:
คะแนน var = getAllScores (); ค่าเฉลี่ย APPY (NULL, คะแนน);
2. พารามิเตอร์โดยตรงอยู่ในรูปของอาร์เรย์
ที่นี่คุณสามารถผ่านพารามิเตอร์อาร์เรย์ได้โดยตรง
คะแนน var = getAllScores (); ค่าเฉลี่ย foFARRAY (คะแนน);
โดยส่วนตัวแล้วฉันคิดว่าทั้งสองรูปแบบข้างต้นนั้นโอเค แต่อันที่สองนั้นง่ายกว่า รู้เพิ่มเติมเกี่ยวกับวิธีการซึ่งสามารถจัดการได้อย่างง่ายดายเมื่อพบฟังก์ชั่นที่เขียนโดยผู้อื่นโดยไม่ต้องปรับโครงสร้างรหัส ผลประโยชน์นี้ยิ่งมากขึ้น
4. ใช้การถ่ายโอนค่าของวิธีพารามิเตอร์ตัวแปร
ตัวอย่าง: วัตถุบัฟเฟอร์มีวิธีการต่อท้ายพารามิเตอร์ที่ไม่แน่นอนซึ่งจะถูกเพิ่มเข้าไปในอาร์เรย์สถานะภายในฟังก์ชัน
var buffer = {state: [], ผนวก: function () {สำหรับ (var i =, n = arguments.length; i <n; i ++) {this.state.push (อาร์กิวเมนต์ [i]);}}};ในเวลานี้วิธีผนวกสามารถยอมรับพารามิเตอร์หลายตัว
buffer.append ('hello,'); buffer.append ('firtname', '', 'lastname', '!'); buffer.append ('newline');รูปแบบเช่น
buffer.append (arg1, arg2, arg3, ... )
ด้วยพารามิเตอร์นี้ของวิธีการใช้เราสามารถระบุอาร์เรย์ที่คำนวณได้เพื่อเรียกวิธีการผนวก
buffer.append.apply (บัฟเฟอร์, getInputStrings ());
หมายเหตุ: บัฟเฟอร์ที่นี่มีความสำคัญ หากผ่านวัตถุอื่นวิธีการที่ผนวกจะพยายามแก้ไขคุณสมบัติสถานะของวัตถุที่ไม่ถูกต้อง
คำใบ้
•ใช้วิธีการใช้เพื่อระบุอาร์เรย์พารามิเตอร์ที่คำนวณได้เพื่อเรียกใช้ฟังก์ชันที่มีพารามิเตอร์ที่ไม่แน่นอน
•ใช้พารามิเตอร์แรกของวิธีการใช้เพื่อให้ตัวรับสัญญาณสำหรับวิธีพารามิเตอร์ตัวแปร
ภาคผนวก 1
ฟังก์ชันเฉลี่ย
ฟังก์ชั่นเฉลี่ย () {var args = []. slice.call (อาร์กิวเมนต์); var sum = args.reduce (ฟังก์ชั่น (ก่อนหน้า, cur) {return prev+cur;}); return parseint (sum/args.length,);};ฟังก์ชั่นเฉลี่ย fofarray
ฟังก์ชั่นค่าเฉลี่ย function (arr) {var sum = arr.reduce (ฟังก์ชั่น (ก่อนหน้า, cur) {return prev+cur;}); return parseint (sum/arr.length,);}วิธี ES5 bind ()
วิธีนี้สร้างอินสแตนซ์ของฟังก์ชั่นที่มีค่าถูกผูกไว้กับค่าที่ส่งผ่านไปยังฟังก์ชัน bind ()
ตัวอย่างเช่น
var color = 'red'; var o = {color: 'blue'}; function sayscolor () {console.log (this.color);} var osaycolor = saycolor.bind (o); osaycolor (); // สีน้ำเงิน "เข้ากันได้กับเวอร์ชันที่ต่ำกว่าโปรดดูเวอร์ชันต่อไปนี้:
if (! function.prototype.bind) {function.prototype.bind = function (othis) {ถ้า (typeof this! == 'function') {// สิ่งที่ใกล้เคียงที่สุดที่เป็นไปได้สำหรับ ecmascript // iscallable function typerror ใหม่ [] .slice.call (อาร์กิวเมนต์,), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.apply (อินสแตนซ์ของ fnop นี้? function.prototype ไม่มีต้นแบบ propertyfnop.prototype = this.prototype; } fbound.prototype = new fnop (); return fbound;};}