light-h5-core-lib 2.10.8 → 2.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "light-h5-core-lib",
3
- "version": "2.10.8",
3
+ "version": "2.10.9",
4
4
  "description": "light core lib",
5
5
  "main": "./LightCore.js",
6
6
  "types": "./type/index.d.ts",
package/pool/PoolObj.js CHANGED
@@ -2,7 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PoolObj = void 0;
4
4
  /**
5
- * 对象池(泛型)
5
+ * 对象池(泛型)</br>
6
+ * 可以防止引用类型二次放入
6
7
  * @author Aonaufly
7
8
  */
8
9
  class PoolObj {
@@ -13,11 +14,12 @@ class PoolObj {
13
14
  * @param clearCallback Item清理函数
14
15
  * @param destroyCallback Item销毁函数
15
16
  */
16
- constructor(cap = 5, initCreateNum = 0, createCallback = null, clearCallback = null, destroyCallback = null) {
17
+ constructor(cap = 5, initCreateNum = 0, createCallback = null, clearCallback = null, destroyCallback = null, isForceRefTypeChecking = true) {
17
18
  this._cap = cap == null ? 5 : cap;
18
19
  this._createCallback = createCallback;
19
20
  this._clearCallback = clearCallback;
20
21
  this._destroyCallback = destroyCallback;
22
+ this._isForceRefTypeChecking = isForceRefTypeChecking;
21
23
  this._pool = [];
22
24
  this.initCreate(initCreateNum == null ? 0 : initCreateNum);
23
25
  }
@@ -34,6 +36,14 @@ class PoolObj {
34
36
  this._pool.push(this._createCallback());
35
37
  }
36
38
  }
39
+ isObject(obj) {
40
+ const str = typeof obj;
41
+ if (str == "object")
42
+ return true;
43
+ if (str == "function")
44
+ return true;
45
+ return false;
46
+ }
37
47
  /**
38
48
  * 放入到对象池
39
49
  * @return 放入到对象池是否成功
@@ -45,6 +55,16 @@ class PoolObj {
45
55
  this._destroyCallback && this._destroyCallback(obj);
46
56
  return false;
47
57
  }
58
+ if (this._isForceRefTypeChecking &&
59
+ this._pool.length > 0 &&
60
+ this.isObject(obj)) {
61
+ for (let i = 0; i < this._pool.length; i++) {
62
+ if (this._pool[i] === obj) {
63
+ //已经放入,无法二次放入
64
+ return false;
65
+ }
66
+ }
67
+ }
48
68
  this._clearCallback && this._clearCallback(obj);
49
69
  this._pool.push(obj);
50
70
  return true;
package/type/index.d.ts CHANGED
@@ -7,7 +7,8 @@ export interface IClear extends IDestroy {
7
7
  clear(): void;
8
8
  }
9
9
  /**
10
- * 对象池(泛型)
10
+ * 对象池(泛型)</br>
11
+ * 可以防止引用类型二次放入
11
12
  * @author Aonaufly
12
13
  */
13
14
  export declare class PoolObj<T> implements IClear {
@@ -16,6 +17,7 @@ export declare class PoolObj<T> implements IClear {
16
17
  private _createCallback;
17
18
  private _clearCallback;
18
19
  private _destroyCallback;
20
+ private _isForceRefTypeChecking;
19
21
  /**
20
22
  * @param cap 容量(容积) <b style="color:red">小于等于0:无限容量,慎用</b>
21
23
  * @param initCreateNum 初始化创建数量 <b style="color:red">(createCallback != null 有效)</b>
@@ -23,11 +25,12 @@ export declare class PoolObj<T> implements IClear {
23
25
  * @param clearCallback Item清理函数
24
26
  * @param destroyCallback Item销毁函数
25
27
  */
26
- constructor(cap?: number, initCreateNum?: number, createCallback?: () => T, clearCallback?: (item: T) => void, destroyCallback?: (item: T) => void);
28
+ constructor(cap?: number, initCreateNum?: number, createCallback?: () => T, clearCallback?: (item: T) => void, destroyCallback?: (item: T) => void, isForceRefTypeChecking?: boolean);
27
29
  /**
28
30
  * 初始化一些数量的item
29
31
  */
30
32
  private initCreate;
33
+ private isObject;
31
34
  /**
32
35
  * 放入到对象池
33
36
  * @return 放入到对象池是否成功