org.eframework.uni.util
Version:
EFramework Utility for Unite 是一个轻量级、跨平台的工具集,提供了统一的 API 接口,确保在多平台环境下保持一致的运行结果。
165 lines (123 loc) • 4.24 kB
Markdown
//img.shields.io/npm/v/org.eframework.uni.util)](https://www.npmjs.com/package/org.eframework.uni.util)
[](https://www.npmjs.com/package/org.eframework.uni.util)
XObject 提供了对象操作工具集,支持类型判断、函数绑定、方法劫持等功能。
- 支持类型判断:判断对象是值类型、引用类型、函数类型或类
- 实现方法劫持:替换和恢复对象方法
- 提供对象复制:深度克隆对象及计算哈希码
- 支持函数绑定:确保方法调用时保持正确的 this 引用
1. 基本类型判断
```typescript
// 判断值类型(数字、字符串、布尔值)
XObject.IsValue(123); // true
XObject.IsValue("abc"); // true
XObject.IsValue(true); // true
XObject.IsValue(new Date()); // false
// 判断引用类型(对象、数组等非值类型)
XObject.IsObject({}); // true
XObject.IsObject([]); // true
XObject.IsObject(new Date()); // true
XObject.IsObject(123); // false
```
2. 函数和类判断
```typescript
// 判断函数类型
function fn() {}
XObject.IsFunction(fn); // true
XObject.IsFunction(() => {}); // true
// 判断类
class MyClass {}
XObject.IsClass(MyClass); // true
XObject.IsClass(fn); // false
```
1. 键值访问
```typescript
// 获取枚举值对应的键名
enum Color { Red = 1, Green = 2, Blue = 3 }
XObject.Key(Color, 2); // 返回 "Green"
// 获取对象中键对应的值
const obj = { name: "张三", age: 25 };
XObject.Value(obj, "name"); // 返回 "张三"
```
2. 反射调用
```typescript
// 通过字符串调用对象方法
const calculator = {
add: (a, b) => a + b
};
XObject.Invoke(calculator, "add", 1, 2); // 返回 3
```
1. 对象克隆
```typescript
// 深度克隆对象
const original = {
name: "张三",
info: { age: 25, scores: [90, 85, 92] },
secret: "密码"
};
// 克隆时排除某些字段
const cloned = XObject.Clone(original, "secret");
// cloned 包含 name 和 info,但不包含 secret
```
2. 计算哈希码
```typescript
// 计算对象哈希码
XObject.HashCode("abc"); // 计算字符串哈希
XObject.HashCode([1, 2, 3]); // 计算数组哈希
XObject.HashCode({a: 1, b: 2}); // 计算对象哈希
```
1. 替换和恢复方法
```typescript
// 替换对象方法
const obj = {
greet() { console.log("你好"); }
};
// 保存原始方法并替换
const original = XObject.Hook(obj, "greet", function() {
console.log("替换后的问候");
});
obj.greet(); // 输出 "替换后的问候"
// 恢复原始方法
XObject.Unhook(obj, "greet");
obj.greet(); // 输出 "你好"
```
1. 使用装饰器
```typescript
class MyComponent extends XObject.Base {
name = "组件1";
@XObject.This()
getName() {
return this.name;
}
}
const comp = new MyComponent();
const getName = comp.getName;
getName(); // 返回 "组件1",即使脱离了对象上下文
```
2. 继承Base类
```typescript
// 继承Base类自动为标记的方法绑定this
class Controller extends XObject.Base {
status = "在线";
@XObject.This()
getStatus() {
return this.status;
}
}
```
1. This 装饰器在对象实例化时自动绑定 this,不需要每次手动调用bind。
2. 它是声明式的,更加简洁,并且在对象方法被传递给其他函数作为回调时特别有用。
更多问题,请查阅[问题反馈](../CONTRIBUTING.md
- [更新记录](../CHANGELOG.md)
- [贡献指南](../CONTRIBUTING.md)
- [许可证](../LICENSE)
[![Version](https: