/**
* 包含生命週期鉤子作為指向數組的鍵的對象
* 觸發生命週期時運行的函數
*
* @私人的
*/
const hooks_ = {};
/**
* 獲取特定生命週期的鉤子列表
*
* @param {string} 類型
* 從中獲取鉤子的生命週期
*
* @param {函數|函數[]} [fn]
* 可選地向您正在獲得的生命週期添加一個(或多個)鉤子。
*
* @return {數組}
* 鉤子數組,如果沒有則為空數組。
*/
const hooks = 函數(類型,fn){
hooks_[類型] = hooks_[類型] || [];
如果(fn){
hooks_[type] = hooks_[type].concat(fn);
}
返回鉤子_[類型];
};
/**
* 將函數掛鉤添加到特定的 videojs 生命週期。
*
* @param {string} 類型
* 掛鉤函數的生命週期。
*
* @param {函數|函數[]}
* 要附加的函數或函數數組。
*/
const hook = 函數(類型,fn){
鉤子(類型,fn);
};
/**
* 從特定的 videojs 生命週期中刪除一個鉤子。
*
* @param {string} 類型
* 函數掛鉤的生命週期
*
* @param {函數} fn
* 要刪除的鉤子函數
*
* @return {布爾值}
* 被移除或取消定義的函數
*/
const removeHook = 函數(類型,fn){
const index = hooks(type).indexOf(fn);
如果(索引 <= -1){
返回假;
}
hooks_[type] = hooks_[type].slice();
hooks_[type].splice(index, 1);
返回真;
};
/**
* 添加一個只運行一次的函數掛鉤到特定的 videojs 生命週期。
*
* @param {string} 類型
* 掛鉤函數的生命週期。
*
* @param {函數|函數[]}
* 要附加的函數或函數數組。
*/
const hookOnce = 函數(類型,fn){
鉤子(類型,[].concat(fn).map(原始=> {
常量包裝器 = (...args) => {
removeHook(類型,包裝器);
返回原件(...參數);
};
返回包裝器;
}));
};
出口 {
鉤子_,
掛鉤,
鉤,
鉤一次,
移除鉤子
};