ในจาวาสคริปต์หากฟังก์ชั่นเป็นของวัตถุพฤติกรรมของการเข้าถึงฟังก์ชั่นผ่านวัตถุเรียกว่า "วิธีการเรียก" ซึ่งแตกต่างจากการเรียกใช้ฟังก์ชันทั่วไปเมื่อทำการเรียกใช้เมธอดการอ้างอิงนี้ในฟังก์ชั่นจะเปลี่ยน - ซึ่งจะอ้างถึงวัตถุที่ใช้เรียกฟังก์ชัน (วัตถุนี้จะกลายเป็นบริบทการเรียกของการเรียกใช้เมธอด):
การคัดลอกรหัสมีดังนี้:
var x = 99;
var sample = {
x: 1,
ACT: ฟังก์ชั่น (a) {
this.x = a*a; // กำหนดค่าให้กับตัวอย่าง x ไม่ใช่ x ของวัตถุทั่วโลก
-
-
sample.act (6);
console.log (sample.x); // 36
console.log (x); // 99
เช่นเดียวกับการเข้าถึงคุณสมบัติในวัตถุนอกเหนือจากการใช้ตัวดำเนินการ DOT แล้ว JavaScript ยังสามารถใช้ตัวดำเนินการของตัวยึดเพื่อโทรหาวิธี:
การคัดลอกรหัสมีดังนี้:
// วิธีอื่นในการเรียกใช้วิธีการ
ตัวอย่าง ["Act"] (7);
console.log (sample.x); // 49
สำหรับฟังก์ชั่นใน JavaScript พฤติกรรมที่น่าสนใจคือการฝังฟังก์ชั่น (ปิด) ในฟังก์ชั่น เมื่อทำการเรียกใช้วิธีการหากมีฟังก์ชั่นฝังตัวในฟังก์ชันเมธอดโค้ดในฟังก์ชันฝังตัวนี้สามารถเข้าถึงค่าตัวแปรภายนอก:
การคัดลอกรหัสมีดังนี้:
// ฟังก์ชั่นซ้อนกันสามารถเข้าถึงตัวแปรภายนอกได้
var y = 88;
var sample2 = {
y: 1,
Act2: ฟังก์ชั่น (a) {
this.y = inner ();
ฟังก์ชั่น inner () {
คืน A*A;
-
-
-
ตัวอย่าง 2.act2 (8);
console.log (ตัวอย่าง 2.y); // 64
console.log (y); // 88
อย่างไรก็ตามตรงกันข้ามกับสัญชาตญาณรหัสที่ฝังอยู่ในฟังก์ชั่นไม่สามารถสืบทอดสิ่งนี้ได้จากภายนอก นั่นคือในฟังก์ชั่นฝังตัวนี้ไม่ได้หมายถึงวัตถุที่เรียกวิธีการ แต่ไปยังวัตถุทั่วโลก:
การคัดลอกรหัสมีดังนี้:
// ฟังก์ชั่นซ้อนกันไม่ได้สืบทอด "สิ่งนี้" "สิ่งนี้" ในฟังก์ชั่นซ้อนกันเป็นวัตถุระดับโลก
var sample3 = {
Act3: function () {
ด้านใน ();
ฟังก์ชั่น inner () {
console.log (สิ่งนี้); // วัตถุหน้าต่าง
-
-
-
sample3.act3 ();
หากคุณต้องการเข้าถึงวัตถุที่เรียกวิธีการในฟังก์ชันฝังตัวคุณสามารถบันทึกค่านี้ลงในตัวแปรในฟังก์ชันภายนอก:
การคัดลอกรหัสมีดังนี้:
// ผ่าน "สิ่งนี้" ไปยังฟังก์ชันซ้อนกัน
var sample4 = {
Act4: function () {
var self = this;
ด้านใน ();
ฟังก์ชั่น inner () {
console.log (self); // object {act4 = function ()}
-
-
-
ตัวอย่าง 4.act4 ();