ใน Javascritp นี่ไม่จำเป็นต้องเป็นบริบทเดียวของวิธีการของวัตถุและสิ่งนี้ยังอ้างถึงในการเรียกใช้ฟังก์ชันทั่วโลกและบริบทอื่น ๆ อีกมากมาย
มันสามารถเป็นวัตถุระดับโลกวัตถุปัจจุบันหรือวัตถุใด ๆ ขึ้นอยู่กับวิธีการเรียกฟังก์ชัน มีหลายวิธีในการเรียกฟังก์ชั่นใน JavaScript: เป็นวิธีการเรียกใช้วัตถุในฐานะการเรียกใช้ฟังก์ชันการเรียกใช้การเรียกสร้างและการใช้การโทรหรือการโทร
1. โทรเป็นวิธีวัตถุ
ใน JavaScript ฟังก์ชั่นเป็นวัตถุดังนั้นฟังก์ชั่นสามารถใช้เป็นแอตทริบิวต์ของวัตถุในเวลานี้ฟังก์ชั่นเรียกว่าวิธีการของวัตถุ
การคัดลอกรหัสมีดังนี้:
var point = {
x: 0,
y: 0,
Moveto: function (x, y) {
this.x = this.x + x;
this.y = this.y + y;
-
-
point.moveto (1, 1) // สิ่งนี้ผูกกับวัตถุปัจจุบันนั่นคือวัตถุจุด
2. เป็นฟังก์ชั่นการโทร
ฟังก์ชั่นสามารถเรียกได้โดยตรงและสิ่งนี้ผูกพันกับวัตถุทั่วโลก ในเบราว์เซอร์หน้าต่างเป็นวัตถุระดับโลก ตัวอย่างเช่นตัวอย่างต่อไปนี้: เมื่อมีการเรียกฟังก์ชั่นสิ่งนี้จะถูกผูกไว้กับวัตถุทั่วโลกและคำสั่งการกำหนดจะถูกดำเนินการต่อไปซึ่งเทียบเท่ากับการประกาศตัวแปรทั่วโลกโดยปริยายซึ่งไม่ใช่สิ่งที่ผู้โทรต้องการ
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น makenosense (x) {
this.x = x;
-
Makenosense (5);
x; // x กลายเป็นตัวแปรระดับโลกที่มีค่า 5
สำหรับฟังก์ชั่นภายในนั่นคือฟังก์ชั่นที่ประกาศภายในร่างกายของฟังก์ชั่นอื่นวิธีการเชื่อมโยงกับวัตถุระดับโลกจะสร้างปัญหาอื่น เราจะใช้วัตถุจุดที่กล่าวถึงก่อนหน้านี้เป็นตัวอย่าง ผลลัพธ์อาจไม่คาดคิด
การคัดลอกรหัสมีดังนี้:
var point = {
x: 0,
y: 0,
Moveto: function (x, y) {
// ฟังก์ชั่นภายใน
var movex = function (x) {
this.x = x; // สิ่งนี้ถูกผูกไว้กับที่ไหน?
-
// ฟังก์ชั่นภายใน
var movey = function (y) {
this.y = y; // สิ่งนี้ถูกผูกไว้กับที่ไหน?
-
Movex (x);
Movey (y);
-
-
point.moveto (1, 1);
point.x;
point.y;
x; // ==> 1
y;
นี่คือข้อบกพร่องในการออกแบบของ JavaScript
การคัดลอกรหัสมีดังนี้:
var point = {
x: 0,
y: 0,
Moveto: function (x, y) {
var that = this;
// ฟังก์ชั่นภายใน
var movex = function (x) {
That.x = x;
-
// ฟังก์ชั่นภายใน
var movey = function (y) {
นั่นคือ = y;
-
Movex (x);
Movey (y);
-
-
point.moveto (1, 1);
point.x;
point.y;
เรียกว่าเป็นตัวสร้าง
JavaScript สนับสนุนการเขียนโปรแกรมเชิงวัตถุ ตามลําดับตัวสร้างในจาวาสคริปต์ก็มีความพิเศษเช่นกัน ในฐานะที่เป็นกฎทั่วไปอื่นตัวสร้างเริ่มต้นด้วยตัวอักษรตัวใหญ่เพื่อเตือนผู้โทรให้โทรด้วยวิธีที่ถูกต้อง หากการโทรถูกต้องสิ่งนี้จะถูกผูกไว้กับวัตถุที่สร้างขึ้นใหม่
การคัดลอกรหัสมีดังนี้:
จุดฟังก์ชัน (x, y) {
this.x = x;
this.y = y;
-
เรียกใช้โดยใช้การสมัครหรือการโทร
ให้เราย้ำว่าในฟังก์ชั่น JavaScript เป็นวัตถุวัตถุมีวิธีการและใช้และการโทรเป็นวิธีการของวัตถุฟังก์ชัน วิธีการทั้งสองนี้มีประสิทธิภาพอย่างมากและอนุญาตให้เปลี่ยนบริบทของการดำเนินการฟังก์ชั่นเช่นวัตถุที่ถูกผูกไว้กับสิ่งนี้ วิธีนี้ใช้ในเทคนิค JavaScript และไลบรารีคลาสมากมาย ลองดูตัวอย่างเฉพาะ:
การคัดลอกรหัสมีดังนี้:
จุดฟังก์ชัน (x, y) {
this.x = x;
this.y = y;
this.moveto = function (x, y) {
this.x = x;
this.y = y;
-
-
var p1 = จุดใหม่ (0, 0);
var p2 = {x: 0, y: 0};
P1.Moveto (1, 1);
P1.Moveto.Apply (P2, [10, 10]);
ในตัวอย่างข้างต้นเราใช้ตัวสร้างเพื่อสร้างวัตถุ P1 ซึ่งมีวิธีการ Moveto; การเรียกใช้วิธีอื่นยังมีฟังก์ชั่นเดียวกันความแตกต่างคือพารามิเตอร์สุดท้ายไม่ได้ส่งผ่านในเครื่องแบบเป็นอาร์เรย์ แต่จะผ่านแยกกัน
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น foo () {
//1. ตัวสร้างที่อ้างอิงนี้เป็นวัตถุที่อ้างอิงโดยอาร์กิวเมนต์ callee
// คำแนะนำคือตัวสร้างที่ดำเนินการผ่านตัวดำเนินการใหม่
if (this.constructor == arguments.callee) {
การแจ้งเตือน ('วัตถุที่สร้างขึ้น');
-
//2 นี่คือหน้าต่างจากนั้นเป็นการโทรทั่วโลก
if (this == window) {
การแจ้งเตือน ('การโทรปกติ');
-
else {// 3
การแจ้งเตือน ('เรียกโดย'+ this.constructor);
-
-
foo (); // การโทรฟังก์ชั่นทั่วโลก
foo.call (New Object ()); // เรียกว่าเป็นวิธีสมาชิกของวัตถุวัตถุ
ใหม่ foo (); // เรียกโดยผู้ให้บริการใหม่เพื่อดำเนินการก่อสร้างวัตถุ