メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Static Methods and Properties

บทความนี้อธิบายการใช้งาน `static` methods และ properties ใน JavaScript classes ซึ่งเป็นคุณสมบัติที่ทำให้ methods และ properties เหล่านั้นเป็นของ class โดยตรง ไม...

Static Methods and Properties ใน JavaScript

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการใช้งาน class syntax ใน JavaScript ซึ่งเป็น syntax sugar ที่ช่วยให้การเขียน Object-Oriented Programming (OOP) ง่ายขึ้น ในบทนี้ เราจะมาเจาะลึกถึง static methods และ properties ซึ่งเป็นคุณสมบัติที่สำคัญในการออกแบบ class ให้มีประสิทธิภาพมากยิ่งขึ้น

Static คืออะไร?

static หมายถึง "เป็นของ class โดยตรง" ไม่ใช่ "เป็นของ instance ของ class" นั่นหมายความว่า static methods และ properties จะถูกเรียกใช้ผ่านทาง class เอง ไม่ใช่ผ่านทาง object ที่สร้างจาก class นั้น

Static Keyword

เราใช้ keyword static นำหน้า methods หรือ properties ที่เราต้องการให้เป็น static

การใช้งาน Static Methods

Static methods คือ methods ที่เป็นของ class โดยตรง ไม่จำเป็นต้องสร้าง instance ของ class ก่อนถึงจะเรียกใช้ได้ มักใช้สำหรับ utility functions หรือ functions ที่ทำงานโดยไม่จำเป็นต้องเข้าถึงข้อมูลเฉพาะของ instance

class MathHelper {
  static add(x, y) {
    return x + y;
  }

  static subtract(x, y) {
    return x - y;
  }
}

// เรียกใช้ static method ผ่านทาง class
const sum = MathHelper.add(5, 3);
console.log(sum); // Output: 8

const difference = MathHelper.subtract(10, 4);
console.log(difference); // Output: 6

// พยายามเรียกใช้ static method ผ่าน instance จะเกิด error
// const helper = new MathHelper();
// helper.add(5, 3); // Error: helper.add is not a function

กรณีใช้งานจริง: สร้าง helper functions ที่เกี่ยวข้องกับ class แต่ไม่จำเป็นต้องเข้าถึงข้อมูลภายใน instance

class StringValidator {
  static isValidEmail(email) {
    // Regular expression สำหรับตรวจสอบ email
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
  }

  static isValidPhoneNumber(phoneNumber) {
    // Regular expression สำหรับตรวจสอบเบอร์โทรศัพท์
    const phoneRegex = /^\d{10}$/; // สมมติว่าเบอร์โทรศัพท์ต้องมี 10 หลัก
    return phoneRegex.test(phoneNumber);
  }
}

console.log(StringValidator.isValidEmail("test@example.com")); // Output: true
console.log(StringValidator.isValidEmail("invalid-email")); // Output: false
console.log(StringValidator.isValidPhoneNumber("0812345678")); // Output: true
console.log(StringValidator.isValidPhoneNumber("123")); // Output: false

ข้อผิดพลาดที่พบบ่อย: พยายามเข้าถึง this ภายใน static method เนื่องจาก this ใน static method จะอ้างอิงถึง class เอง ไม่ใช่ instance

class MyClass {
  constructor(name) {
    this.name = name;
  }

  static myStaticMethod() {
    // console.log(this.name); // Error: Cannot read properties of undefined (reading 'name')
    console.log(this); // Output: class MyClass { ... }
  }
}

MyClass.myStaticMethod();

หากต้องการเข้าถึงข้อมูล instance จาก static method จะต้องส่ง instance เข้าไปเป็น parameter

class MyClass {
  constructor(name) {
    this.name = name;
  }

  static myStaticMethod(instance) {
    console.log(instance.name); // เข้าถึงข้อมูล instance ผ่าน parameter
  }
}

const myInstance = new MyClass("John");
MyClass.myStaticMethod(myInstance); // Output: John

การใช้งาน Static Properties

Static properties คือ properties ที่เป็นของ class โดยตรง ไม่ใช่ของ instance มักใช้สำหรับเก็บค่าคงที่ (constants) หรือข้อมูลที่เกี่ยวข้องกับ class โดยรวม

class Circle {
  static PI = 3.14159; // Static property เก็บค่า PI

  constructor(radius) {
    this.radius = radius;
  }

  calculateArea() {
    return Circle.PI * this.radius * this.radius;
  }
}

const myCircle = new Circle(5);
console.log(myCircle.calculateArea()); // Output: 78.53975

console.log(Circle.PI); // เข้าถึง static property ผ่านทาง class

กรณีใช้งานจริง: กำหนดค่าคงที่ที่ใช้ร่วมกันใน class

class APIConfig {
  static BASE_URL = "https://api.example.com";
  static API_KEY = "YOUR_API_KEY";

  static getEndpoint(endpoint) {
    return `${APIConfig.BASE_URL}/${endpoint}?apiKey=${APIConfig.API_KEY}`;
  }
}

const userEndpoint = APIConfig.getEndpoint("users");
console.log(userEndpoint); // Output: https://api.example.com/users?apiKey=YOUR_API_KEY

ข้อผิดพลาดที่พบบ่อย: พยายามเข้าถึง static property ผ่าน instance โดยตรง

class MyClass {
  static myStaticProperty = "Hello";
}

const myInstance = new MyClass();
// console.log(myInstance.myStaticProperty); // Error: undefined
console.log(MyClass.myStaticProperty); // ถูกต้อง

สรุป

static methods และ properties เป็นเครื่องมือที่มีประโยชน์ในการออกแบบ class ใน JavaScript ช่วยให้เราสร้าง utility functions, เก็บค่าคงที่, และจัดการข้อมูลที่เกี่ยวข้องกับ class โดยรวมได้อย่างมีประสิทธิภาพ การเข้าใจหลักการใช้งาน static จะช่วยให้โค้ดของเราเป็นระเบียบและง่ายต่อการบำรุงรักษามากยิ่งขึ้น

บทต่อไป

ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ Getter และ Setter methods ซึ่งเป็น methods พิเศษที่ช่วยให้เราควบคุมการเข้าถึง properties ของ object ได้อย่างละเอียด

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る