# 方法參考

> Entase 用戶端完整的公開介面 – 預訂、事件訂閱、執行期間的 getter 和 setter，以及清理。

`Entase` 執行個體完整的公開介面。

## 預訂

| 方法 | 說明 |
|---|---|
| `book(eventID, options?)` | 開啟活動的結帳流程。請參閱[開啟結帳流程](/developers/js-client/opening-the-checkout.md)。 |

## 事件

| 方法 | 說明 |
|---|---|
| `on(name, callback)` | 註冊回呼函式。每個事件名稱只能註冊一個 – 請參閱[事件](/developers/js-client/events.md)。 |
| `off(name, callback?)` | 移除為某個名稱註冊的回呼函式。`callback` 引數會被忽略。 |

兩者均接受以空格分隔的字串或名稱陣列。

## 地區設定

| 方法 | 說明 |
|---|---|
| `getLocale()` | 傳回已設定的值；如設定的是字面值 `'auto'`，亦會傳回該值。 |
| `setLocale(locale)` | 變更後續預訂所使用的結帳語言。 |

`getLocale()` 回報的是設定，而非解析後的結果 – 使用預設值時，它會傳回 `'auto'`，而不是實際將會使用的語言。`'auto'` 值會在呼叫 `book()` 的當下，根據 `<html>` 元素的 `lang` 屬性解析，因此即使在建立用戶端後變更頁面語言，也會自動套用，無需進一步操作。

## 結帳模式

| 方法 | 說明 |
|---|---|
| `getCheckoutMode()` | 傳回解析後的模式：`'pane'` 或 `'popup'` – 絕不會是 `'auto'`。 |
| `setCheckoutMode(mode)` | 設定模式。`'auto'` 會重新執行偵測；無法識別的值會被忽略。 |

請參閱[結帳模式](/developers/js-client/checkout-modes.md)。

## 追蹤

| 方法 | 說明 |
|---|---|
| `getTracking()` | 傳回目前的追蹤參數物件。 |
| `setTracking(tprm)` | 取代追蹤參數。不會合併 – 請傳入完整的參數組合。 |

請參閱[追蹤及同意](/developers/js-client/tracking-and-consent.md)。

## 彈出式視窗定位

| 方法 | 說明 |
|---|---|
| `getTopWindowCenter()` | 傳回 `{ top, left }`，即彈出式視窗置中的位置。 |
| `setTopWindowCenter(top, left)` | 移動該位置。 |

中心點會在建立執行個體時，根據瀏覽器視窗在螢幕上的位置計算一次。訪客移動或調整視窗大小時，不會重新計算，因此在長時間開啟的頁面上，彈出式視窗可能會在遠離目前視窗的位置開啟。如有需要，請在預訂前重新計算：

```js
entase.setTopWindowCenter(
  window.screenTop + (window.innerHeight / 2),
  window.screenLeft + (window.innerWidth / 2)
);
```

這在面板模式下不會產生任何效果。

## 清理

| 方法 | 說明 |
|---|---|
| `destroy()` | 移除用戶端的視窗監聽器。執行個體無法重用。 |

當擁有該執行個體的元件或檢視消失時，請呼叫此方法。之後，`book()` 會記錄錯誤而不執行任何操作 – 請改為建立新的執行個體。
