1. php c++ java(物件導向)

    1. class 類別(模子) — new —> 物件(object) / 實例 (instance)
    class Member {
        String name;
        String email;
        Int age; // 4 bytes
        
        Member() // 建構式
        
        function void setName(String newName) {
            this.name = newName;
        }
    }
    

    截圖 2021-10-16 上午10.04.43.png

    let m1 = new Member();
    // new 幫你要跟作業系統要一塊記憶體空間
    // 這塊空間多大呢? 就是 Member 這麼大
    m1.setName(“AAA”);
    
    let m2 = new Member();
    m2.setName(“BBB”);
    
  2. javascript(原型式物件導向 protopyp)

    1. class類別

建構式 (也只是一個 function)

new 建構式() --> 做出一個新的物件

new 跟作業系統要一塊記憶體的空間

JavaScript對象與原型

// Promise 是一個表示非同步運算的最終完成或失敗的物件
// 物件
// 最終成功
// 最終失敗
// 最終: 非同步完成的時候

let doWork = function (job, timer, isOK) {
  // 物件 new Promise(...) --> 建立一個 Promise 物件
  // 建構式(Promise) 必須要傳一個一個函式 executer 執行者
  // executor(處理成功 resolve, 處理失敗 reject)
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let dt = new Date();
      // 如果會失敗, reject("錯誤的訊息")  pending ==> rejected
      // reject("故意失敗了");

      // 成功的 pending ==> resolved / fulfilled
      // resolve(`完成工作 ${job} at ${dt.toISOString()}`);

      if (isOK) {
        resolve(`完成工作 ${job} at ${dt.toISOString()}`);
      } else {
        reject("故意失敗了");
      }
    }, timer);
  });
};

let dt = new Date();
console.log(`開始工作 at ${dt.toISOString()}`);

// 刷牙(3000) --> 吃早餐(5000) --> 寫功課(3000)
// promise chain
doWork("刷牙", 3000, true)
  .then((data) => {
    // fulfilled 時執行 <---> resolve
    console.log("fulfilled", data);
    return doWork("吃早餐", 5000, true); // doWork 會回傳一個 new Promise
  })
  // eatPromise.then
  .then((data) => {
    console.log("fulfilled", data);
    return doWork("寫功課", 3000, true);
  })
  // homeworkPromise.then
  .then((data) => {
    console.log("fulfilled", data);
  })
  .catch((err) => {
    // 攔截前面的 then 第二個參數要做的那個錯誤處理函式
    console.error("rejected", err);
  });

結構more

Promise 本身是一個建構函式,函式也是屬於物件的一種,因此可以附加其它屬性方法在上,透過 console 的結果可以看到 Promise 可以直接使用 all、race、resolve、reject 的方法,寫法如下(後面再介紹運用方式):