ใน ECMASCRIPT V3 วิธีการทั้งสองนี้ถูกกำหนดไว้สำหรับต้นแบบฟังก์ชัน ฟังก์ชั่นของสองวิธีนี้เหมือนกัน: การใช้สองวิธีนี้สามารถเรียกฟังก์ชั่นเช่นเรียกใช้วิธีการวัตถุอื่น ประโยคนี้ถูกคัดลอกมาจากหนังสืออย่างน้อยฉันก็ไม่เข้าใจว่าสิ่งนี้หมายถึงอะไร
มาพูดถึงเรื่องง่ายและเข้าใจง่าย ก่อนอื่นดูรหัส:
การคัดลอกรหัสมีดังนี้:
บทนำฟังก์ชั่น (ชื่ออายุ)
-
document.write ("ชื่อของฉันคือ"+ชื่อ+". ฉันคือ"+อายุ);
-
var p = คนใหม่ ();
บทนำ Call (P, "Windking", 20);
มาพูดคุยเกี่ยวกับรหัสข้างต้น หลังจากใช้การโทรแล้วการแนะนำจะกลายเป็นวิธีการของ P ฉันสงสัยว่าคุณเข้าใจสิ่งนี้หรือไม่? การใช้วิธีการโทรรหัสด้านบนเทียบเท่ากับรหัสนี้:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นคน (ชื่ออายุ)
-
this.name = ชื่อ;
this.age = อายุ;
this.introduce = function () {
document.write ("ชื่อของฉันคือ"+ชื่อ+". ฉันคือ"+อายุ);
-
-
คุณเข้าใจความหมายหรือไม่? ใช้ฟังก์ชั่นเดียวกัน
ตกลงไม่ว่าวิธีนี้จะใช้วิธีนี้ในทางปฏิบัติลองพูดคุยเกี่ยวกับไวยากรณ์ก่อน
การโทรรับพารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์ พารามิเตอร์แรกของการโทรหมายถึงวัตถุที่คุณต้องการ ตัวอย่างเช่นในตัวอย่างข้างต้นวิธีการแนะนำหวังว่ามันจะถูกเรียกโดยวัตถุ P ดังนั้น P จึงใช้เป็นพารามิเตอร์แรกของการโทร จำนวนพารามิเตอร์ที่เหลืออยู่นั้นเป็นไปตามอำเภอใจและใช้เป็นพารามิเตอร์ของวิธีการแนะนำ คำสั่งซื้ออยู่ในคำสั่งที่ประกาศโดยพารามิเตอร์แนะนำ ตัวอย่างเช่นแนะนำ. call (p, "windking", 20), ถ้าแนะนำเป็นวิธีการตัวอย่างของ p, นี่คือความหมาย: p.introduce ("windking", 20) คุณเข้าใจไหม โปรดจำไว้ว่าลำดับของพารามิเตอร์ขาเข้าจะต้องสอดคล้องกับลำดับของพารามิเตอร์การประกาศฟังก์ชัน
หลังจากทำความเข้าใจกับการโทรแล้ววิธีการสมัครนั้นง่ายต่อการเข้าใจ ความแตกต่างเพียงอย่างเดียวระหว่างการสมัครและการโทรคือการโทรรับอย่างน้อยหนึ่งพารามิเตอร์ในขณะที่ใช้เฉพาะการยอมรับพารามิเตอร์สองตัวเท่านั้น พารามิเตอร์แรกเหมือนกับการโทรและพารามิเตอร์ที่สองคือชุดที่มีตัวห้อย ตัวอย่างเช่น retniduction.call (p, "windking", 20) สามารถเขียนใหม่ลงในบทนำ apply (p, ["windking", 20]) คุณเข้าใจเวลานี้ไหม?
ดังนั้นการใช้สองวิธีนี้คืออะไร? หากเราต้องการใช้ฟังก์ชั่นข้างต้นมันจะดีกว่าที่จะใช้การแนะนำในฐานะผู้คนหรือไม่?
ฉันสรุปแอปพลิเคชันเป็นสอง:
1. วิธีการแบ่งปัน มาดูรหัสก่อน:
การคัดลอกรหัสมีดังนี้:
บทนำฟังก์ชั่น (ชื่ออายุ)
-
document.write ("ชื่อของฉันคือ"+ชื่อ+". ฉันคือ"+อายุ);
-
นี่เป็นวิธีการแนะนำตัวเอง ตอนนี้สมมติว่าเรามีชั้นเรียนของเด็กผู้ชายและชั้นเรียนของหญิงสาว (ฉันแค่สาธิตที่นี่ในทางปฏิบัติจะใช้ชั้นเรียนหลักของผู้คน) เพราะการแนะนำของพวกเขาเหมือนกันดังนั้นเราจึงสามารถแบ่งปันวิธีนี้ได้
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นเด็กชาย ()
-
this.boyIntroduce = function () {
บทนำโทร (นี่ชื่ออายุ);
-
-
ในทำนองเดียวกันก็เป็นจริงในผู้หญิงดังนั้นเราจึงสามารถหลีกเลี่ยงการเขียนรหัส ที่จริงแล้วนี่ค่อนข้างไกลเพราะเราสามารถเขียนได้ว่า:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นเด็กชาย ()
-
this.boyIntroduce = function () {
บทนำ (ชื่ออายุ);
-
-
แต่ในเวลานี้ถ้าเราใช้งานมันจะดูง่ายขึ้นมาก:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นเด็กชาย ()
-
this.boyIntroduce = function () {
บทนำ Apply (ข้อโต้แย้งนี้);
-
-
มันง่ายกว่านี้มากเหรอ? หากมีพารามิเตอร์มากมายคุณไม่จำเป็นต้องเขียนพารามิเตอร์ที่หนาแน่นเช่นนี้!
2. การโทรข้ามโดเมน
ดูตัวอย่างง่ายๆ (สำหรับการสาธิตเท่านั้นไม่มีค่า):
การคัดลอกรหัสมีดังนี้:
Function Boy (ชื่ออายุ)
-
this.boyIntroduce = function () {
document.write ("ชื่อของฉันคือ"+ชื่อ+". ฉันคือ"+อายุ);
-
-
ฟังก์ชั่นสาว (ชื่ออายุ)
-
-
นี่คือเด็กผู้ชายและชั้นเรียนจากนั้นเราเขียนรหัสต่อไปนี้:
var b = เด็กใหม่ ("windking", 20);
B.BoyIntroduce ();
ไม่มีการคัดค้านเรื่องนี้ สมมติว่ามีผู้หญิงคนหนึ่งที่ต้องการแนะนำตัวเองในวันหนึ่งและเพียงแค่ใช้มันโดยบังเอิญจากนั้นไม่จำเป็นต้องให้ฉันปรับเปลี่ยนชั้นเรียนหญิงสาวเพราะผู้หญิงคนอื่น ๆ ขี้อายและไม่อยากแนะนำตัวเอง จากนั้นฉันสามารถทำสิ่งนี้ได้ในเวลานี้
var g = สาวใหม่ ("xuan", 22);
บทนำ call (g, "xuan", 22);
3. การใช้จริง - มรดก
โอเคข้างต้นเป็นกลอุบายเล็ก ๆ ทั้งหมดและไม่ใช่สถานที่แห่งความสง่างาม ด้านล่างคือการโทรและการใช้งานที่ใช้กันอย่างแพร่หลายมากที่สุดซึ่งใช้สำหรับการสืบทอดโครงสร้าง