บทนำสู่การโทร () ในเว็บไซต์ทางการของ Mozilla คือ:
การคัดลอกรหัสมีดังนี้:
เมธอดการโทร () เรียกใช้ฟังก์ชันหรือวิธีการที่ระบุค่านี้และค่าพารามิเตอร์ที่ระบุหลายค่า
โทร () ไวยากรณ์
การคัดลอกรหัสมีดังนี้:
fun.call (thisarg [, arg1 [, arg2 [, ... ]]])
พารามิเตอร์การโทร ()
สิ่งนี้
การคัดลอกรหัสมีดังนี้:
ค่านี้ระบุเมื่อฟังก์ชั่นความสนุกกำลังทำงานอยู่ ควรสังเกตว่าค่าที่ระบุนี้ไม่ได้หมายถึงค่าจริงนี้เมื่อใช้งานฟังก์ชัน หากฟังก์ชั่นนี้อยู่ในโหมดที่ไม่ใช่ Strict ค่านี้ระบุว่าเป็น NULL และ Undefined จะชี้ไปที่วัตถุทั่วโลกโดยอัตโนมัติ (วัตถุหน้าต่างในเบราว์เซอร์) และค่านี้ที่มีค่าดั้งเดิม (หมายเลข, สตริง, ค่าบูลีน) จะชี้ไปที่วัตถุห่ออัตโนมัติของค่าดั้งเดิม
arg1, arg2, ...
การคัดลอกรหัสมีดังนี้:
รายการพารามิเตอร์ที่ระบุ
call () เมธอดใน JavaScript
อย่าให้ความสนใจกับคำอธิบายที่ซับซ้อนข้างต้นเริ่มกระบวนการนี้ทีละขั้นตอน
ตัวอย่างวิธีการโทร ()
ดังนั้นฉันจึงเขียนสวัสดีอีกโลก:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นพิมพ์ (p1, p2) {
console.log (p1 + '' + p2);
-
พิมพ์ ("สวัสดี", "World");
print.call (undefined, "hello", "World");
ทั้งสองวิธีมีเอาท์พุทเดียวกันอย่างไรก็ตามในทางตรงกันข้ามวิธีการโทรยังผ่านการไม่ได้กำหนด
ถัดไปลองดูตัวอย่างอื่น
การคัดลอกรหัสมีดังนี้:
var obj = function () {};
ฟังก์ชั่นพิมพ์ (p1, p2) {
console.log (p1 + '' + p2);
-
print.call (obj, "hello", "World");
แต่ที่นี่สิ่งที่เราผ่านไปนั้นยังคงไม่ได้กำหนดไว้เพราะตัวอย่างที่ไม่ได้กำหนดในตัวอย่างก่อนหน้านี้เป็นเพราะต้องส่งพารามิเตอร์เข้ามาไม่มีการสะท้อนการใช้การโทรที่นี่อย่างแท้จริงดูตัวอย่างที่ดีกว่า
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นพิมพ์ (ชื่อ) {
console.log (this.p1 + '' + this.p2);
-
var h = {p1: "สวัสดี", p2: "โลก", พิมพ์: พิมพ์};
H.Print ("FD");
var h2 = {p1: "สวัสดี", p2: "โลก"};
print.call (H2, "ไม่มีอะไร");
การโทรถูกเรียกโดยการยืมวิธีและวัตถุของคนอื่นเช่นเดียวกับการเรียกของคุณเอง ใน H.print เมื่อมีการเรียกฟังก์ชั่นเป็นวิธีการสิ่งนี้จะชี้ไปที่วัตถุที่เกี่ยวข้อง แต่ในตัวอย่างนี้เราไม่เข้าใจว่า H2 เรียกว่าพิมพ์หรือพิมพ์ที่เรียกว่า H2 ดังนั้นฉันจึงยกตัวอย่างของ Mozilla
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นผลิตภัณฑ์ (ชื่อราคา) {
this.name = ชื่อ;
this.price = ราคา;
ถ้า (ราคา <0)
โยน rangeerror ('ไม่สามารถสร้างผลิตภัณฑ์ "' + ชื่อ + '" ด้วยราคาติดลบ');
คืนสิ่งนี้;
-
ฟังก์ชั่นอาหาร (ชื่อราคา) {
product.call (นี่, ชื่อ, ราคา);
this.category = 'อาหาร';
-
Food.prototype = ผลิตภัณฑ์ใหม่ ();
var cheese = อาหารใหม่ ('feta', 5);
console.log (ชีส);
ที่นี่เราสามารถเข้าใจได้ว่าวัตถุใดที่เรียกวิธีการใด ในตัวอย่างอินสแตนซ์วัตถุที่สร้างขึ้นโดยใช้ตัวสร้างอาหารจะมีชื่อและแอตทริบิวต์ราคาที่เพิ่มในตัวสร้างผลิตภัณฑ์ แต่แอตทริบิวต์หมวดหมู่ถูกกำหนดไว้ในตัวสร้างที่เกี่ยวข้อง
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นพิมพ์ (ชื่อ) {
console.log (this.p1 + '' + this.p2);
-
var h2 = function (no) {
this.p1 = "สวัสดี";
this.p2 = "โลก";
print.call (นี่ "ไม่มีอะไร");
-
H2 ();
ที่นี่ H2 ถูกใช้เป็นตัวรับสัญญาณเพื่อเรียกใช้ฟังก์ชั่นพิมพ์ เช่นเดียวกับในตัวอย่างอาหารในตัวสร้างเด็กคุณสามารถใช้การสืบทอดโดยการเรียกใช้วิธีการโทรของตัวสร้างหลัก
สำหรับข้อดีของวิธีการโทรมีการแนะนำใน "JavaScript ที่มีประสิทธิภาพ"
1. ใช้วิธีการโทรเพื่อปรับแต่งตัวรับสัญญาณเพื่อเรียกใช้ฟังก์ชัน
2. ใช้วิธีการโทรเพื่อเรียกวิธีการที่ไม่มีอยู่ในวัตถุที่กำหนด
3. ใช้วิธีการโทรเพื่อกำหนดฟังก์ชั่นลำดับที่สูงกว่าที่อนุญาตให้ผู้ใช้ระบุผู้รับสำหรับฟังก์ชั่นการโทรกลับ