CodeGym /課程 /Frontend SELF TW /對象的方法

對象的方法

Frontend SELF TW
等級 36 , 課堂 1
開放

7.1 創建對象的方法

JavaScript中的對象方法是與對象相關的函數,可以對這些對象執行操作。方法允許對象具有自己的行為,這使得它們成為面向對象編程的重要組成部分。下面我們將討論創建和使用對象的方法。

對象的方法可以用多種方式創建。我們來看看主要的幾種方法。

1. 對象字面量

可以在對象字面量中直接使用函數創建方法。

在這個例子中,對象person有一個方法greet(),它使用對象的屬性name返回一個字符串:

JavaScript
    
      let person = {
        name: 'John',
        age: 30,
        greet: function() {
          return `Hello, my name is ${this.name}`;
        }
      };

      console.log(person.greet()); // 輸出: Hello, my name is John
    
  

2. 方法的簡寫語法

在ES6中,出現了一種創建對象方法的簡寫語法。

這種語法使代碼更簡潔易讀:

JavaScript
    
      let person = {
        name: 'John',
        age: 30,
        greet() {
          return `Hello, my name is ${this.name}`;
        }
      };

      console.log(person.greet()); // 輸出: Hello, my name is John
    
  

3. 創建對象後添加方法

可以在創建對象之後為其添加方法。

在這個例子中,方法greet()在創建對象person後被添加進去:

JavaScript
    
      let person = {
        name: 'John',
        age: 30
      };

      person.greet = function() {
        return `Hello, my name is ${this.name}`;
      };

      console.log(person.greet()); // 輸出: Hello, my name is John
    
  

4. 使用構造函數

構造函數允許為所有對象實例創建方法。

在這個例子中,方法greet()為使用構造函數Person()創建的每個對象實例創建:

JavaScript
    
      function Person(name, age) {
        this.name = name;
        this.age = age;
        this.greet = function() {
          return `Hello, my name is ${this.name}`;
        };
      }

      let john = new Person('John', 30);
      let jane = new Person('Jane', 25);

      console.log(john.greet()); // 輸出: Hello, my name is John
      console.log(jane.greet()); // 輸出: Hello, my name is Jane
    
  

7.2 使用對象的方法

1. 用點符號訪問方法

可以使用點符號調用對象的方法:

JavaScript
    
      let person = {
        name: 'John',
        age: 30,
        greet() {
          return `Hello, my name is ${this.name}`;
        }
      };

      console.log(person.greet()); // 輸出: Hello, my name is John
    
  

2. 用方括號訪問方法

也可以使用方括號調用對象的方法:

JavaScript
    
      let person = {
        name: 'John',
        age: 30,
        greet() {
          return `Hello, my name is ${this.name}`;
        }
      };

      let result = person['greet']();
      console.log(result); // 輸出: Hello, my name is John
    
  

3. 在另一個方法中調用方法

對象的方法可以調用同一對象的其他方法。

在這個例子中,方法sum()mul()使用了方法setValues()設置的值:

JavaScript
    
      let calculator = {
        a: 0,
        b: 0,
        setValues(a, b) {
          this.a = a;
          this.b = b;
        },
        sum() {
          return this.a + this.b;
        },
        mul() {
          return this.a * this.b;
        }
      };

      calculator.setValues(2, 3);

      console.log(calculator.sum()); // 輸出: 5
      console.log(calculator.mul()); // 輸出: 6
    
  

4. 在方法中使用this

關鍵字this在對象的方法中引用對象本身,這樣可以訪問其屬性和其他方法:

JavaScript
    
      let car = {
        brand: 'Toyota',
        model: 'Camry',
        getInfo() {
          return `Brand: ${this.brand}, Model: ${this.model}`;
        }
      };

      console.log(car.getInfo()); // 輸出: Brand: Toyota, Model: Camry
    
  

5. 將方法作為回調傳遞

當對象的方法作為回調傳遞時,需要注意this的值:

JavaScript
    
      let person = {
        name: 'John',
        age: 30,
        greet() {
          console.log(`Hello, my name is ${this.name}`);
        }
      };

      setTimeout( person.greet, 1000 ); // 輸出: Hello, my name is undefined
    
  

在這個例子中,當方法greet()作為回調傳遞給setTimeout()時,this的值丟失了。 結果是thisgreet()內指向全局對象window。 在瀏覽器中,對象window有一個屬性name,默認情況下是一個空字符串""。 因此,輸出的結果是"Hello, my name is"。 要保持正確的this值,可以使用bind()方法將函數綁定到特定的上下文:

JavaScript
    
      setTimeout(person.greet.bind(person), 1000); // 輸出: Hello, my first name is John
    
  

或者可以使用箭頭函數:

JavaScript
    
      setTimeout(() => person.greet(), 1000); // 輸出: Hello, my first name is John
    
  

7.3 共用方法

1. 通過原型繼承方法

可以將方法添加到對象的原型中,使得它們對所有實例都可用:

JavaScript
    
      function Person(name, age) {
        this.name = name;
        this.age = age;
      }

      Person.prototype.greet = function() {
        return `Hello, my name is ${this.name}`;
      };

      let john = new Person('John', 30);
      let jane = new Person('Jane', 25);

      console.log(john.greet()); // 輸出: Hello, my name is John
      console.log(jane.greet()); // 輸出: Hello, my name is Jane
    
  

2. 使用其他對象的方法

可以使用call()apply()方法將一個對象的方法調用到另一個對象中:

JavaScript
    
      let person1 = {
        name: 'John',
        age: 30,
        greet() {
          return `Hello, my name is ${this.name}`;
        }
      };

      let person2 = {
        name: 'Jane',
        age: 25
      };

      console.log(person1.greet.call(person2)); // 輸出: Hello, my name is Jane
    
  
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION