การเปรียบเทียบ 'สิ่งนี้' ใน JavaScript และ 'ตัวเอง' ใน Python
ในการเขียนโปรแกรมเชิงวัตถุthisและselfทั้งสองใช้เพื่ออ้างถึงอินสแตนซ์ปัจจุบันของวัตถุที่มีการเรียกใช้เมธอด
วัตถุเป็นโครงสร้างข้อมูลที่ประกอบด้วยเขตข้อมูลและวิธีการ ออบเจกต์แสดงถึงอินสแตนซ์เฉพาะของคลาส ซึ่งเป็นแม่แบบหรือพิมพ์เขียวสำหรับสร้างออบเจกต์
เมธอดคือฟังก์ชันที่เกี่ยวข้องกับวัตถุและใช้เพื่อดำเนินการบางอย่างหรือการคำนวณกับวัตถุ เมธอดถูกกำหนดไว้ในคำนิยามของคลาสและสามารถเรียกใช้บนออบเจกต์เพื่อทำงานเฉพาะได้
ใน JavaScript thisคำสำคัญหมายถึงวัตถุปัจจุบันที่กำลังเรียกใช้ฟังก์ชันปัจจุบัน เป็นวิธีการเข้าถึงคุณสมบัติและวิธีการของวัตถุจากภายในวัตถุเอง ค่าของthisถูกกำหนดโดยวิธีการเรียกใช้ฟังก์ชัน
นี่คือตัวอย่างวิธีการthisใช้งานใน JavaScript:
const person = {
name: 'John',
sayHi: function() {
console.log(`Hi, my name is ${this.name}`);
}
}
person.sayHi(); // Output: "Hi, my name is John"
ใน Python selfพารามิเตอร์ใช้เพื่ออ้างถึงอินสแตนซ์ของคลาส มันเทียบเท่ากับthisภาษาเชิงวัตถุอื่น ๆ พารามิเตอร์ใช้เพื่อเข้าถึง แอตทริบิวต์selfและเมธอดของคลาสจากภายในคลาสเอง
และนี่คือตัวอย่างวิธีการselfใช้งานใน Python:
class Person:
def __init__(self, name):
self.name = name
def say_hi(self):
print(f"Hi, my name is {self.name}")
person = Person("John")
person.say_hi() # Output: "Hi, my name is John"
จุดบกพร่องทั่วไปอย่างหนึ่งที่อาจเกิดขึ้นได้เมื่อใช้selfพารามิเตอร์ใน Python คือการลืมรวมพารามิเตอร์ตัวแรกในการกำหนดเมธอด ซึ่งอาจทำให้ a TypeErrorถูกยกขึ้นเมื่อเรียกใช้เมธอด เนื่องจากเมธอดคาดหวังว่าselfพารามิเตอร์จะถูกส่งผ่าน
นี่คือตัวอย่างของข้อผิดพลาดประเภทนี้:
class Person:
def __init__(self, name):
self.name = name
def say_hi(): // missing self parameter
print(f"Hi, my name is {self.name}")
person = Person("John")
person.say_hi()
เพื่อแก้ไขจุดบกพร่องนี้ เราจำเป็นต้องรวมselfพารามิเตอร์ไว้ในการกำหนดเมธอดดังนี้:
def say_hi(self):
print(f"Hi, my name is {self.name}")
การดีบัก JavaScript
จุดบกพร่องทั่วไปอย่างหนึ่งที่อาจเกิดขึ้นได้เมื่อใช้thisคำหลักใน JavaScript คือการใช้thisภายในฟังก์ชันที่ไม่ได้เชื่อมโยงกับวัตถุ ในกรณีนี้ ค่าของthisจะถูกตั้งค่าเป็นอ็อบเจกต์ส่วนกลาง ซึ่งอาจนำไปสู่ลักษณะการทำงานที่ไม่คาดคิดได้
นี่คือตัวอย่างของข้อผิดพลาดประเภทนี้:
const person = {
name: 'John',
sayHi: function() {
console.log(`Hi, my name is ${this.name}`);
}
}
const greet = person.sayHi;
greet(); // Output: "Hi, my name is undefined"
เมื่อเราเรียกใช้greetฟังก์ชัน ค่าthisภายในฟังก์ชันจะถูกตั้งค่าเป็น global object ซึ่งไม่มีnameคุณสมบัติ เป็นผลให้บันทึกการทักทายundefinedแทนค่าที่คาดไว้
ในการแก้ไขข้อบกพร่องนี้ เราสามารถผูกค่าของthisกับpersonวัตถุได้เมื่อสร้างgreetตัวแปร หรือเราสามารถใช้ฟังก์ชันลูกศรสำหรับsayHiเมธอดซึ่งไม่มีค่าของตัวเองthisและใช้thisค่าของบริบทโดยรอบ
นี่คือวิธีที่เราสามารถแก้ไขตัวอย่างโดยใช้bindวิธีการ:
const person = {
name: 'John',
sayHi: function() {
console.log(`Hi, my name is ${this.name}`);
}
}
const greet = person.sayHi.bind(person);
greet(); // Output: "Hi, my name is John"
const person = {
name: 'John',
sayHi: () => {
console.log(`Hi, my name is ${this.name}`);
}
}
const greet = person.sayHi;
greet(); // Output: "Hi, my name is John"
ใน JavaScript thisคำสำคัญใช้เพื่อเข้าถึงคุณสมบัติและวิธีการของวัตถุจากภายในวัตถุเอง การทำความเข้าใจวิธีกำหนดค่าของthisและวิธีการใช้อย่างถูกต้องเป็นสิ่งสำคัญสำหรับการทำงานกับออบเจกต์ใน JavaScript
ใน Python selfพารามิเตอร์ใช้เพื่ออ้างถึงอินสแตนซ์ของคลาสและเข้าถึงแอตทริบิวต์และวิธีการ การทำความเข้าใจวิธีใช้selfพารามิเตอร์อย่างถูกต้องเป็นสิ่งสำคัญสำหรับการทำงานกับคลาสและการเขียนโปรแกรมเชิงวัตถุใน Python
หากไม่มีความเข้าใจที่ถูกต้องเกี่ยวกับthisJavaScript และselfPython การเขียนโค้ดที่ถูกต้องและบำรุงรักษาได้ซึ่งใช้ออบเจกต์และคลาสเป็นเรื่องยาก
อ่านโพสต์อื่นของฉัน ' บางสิ่งเกี่ยวกับ JavaScript และ Python 'เพื่อดูความเหมือนและความแตกต่างเพิ่มเติมระหว่างภาษาโปรแกรมทั้งสอง
ขอขอบคุณที่อ่านและหวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์ ฉันเปิดรับคำติชมและหากคุณพบข้อผิดพลาด โปรดแจ้งให้เราทราบ





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)