泛型
泛型中的T就像一个占位符,或者说是一个变量,在使用的时候可以把定义的类型向参数一样传入,它可以原封不动的输出 我们在使用的时候可以有两种方式指定类型。
- 定义要使用的类型
- TS类型推断,自我推导出类型
type和interface都可以定义函数类型 ,也用泛型写一下,type这么写
interface这么写
defineProperty的如何实现数据代理
Object.defineProperty()
1. 基本使用
语法:Object.defineProperty(obj, key, descriptor:属性和方法)
obj:要进行操作的对象。
key:要定义或修改的属性的名称
Object.defineProperty(obj, 'a', {
configurable: true, //是否允许删除
enumerable: true, //是否允许枚举
value: undefined, //就是value值
writable: true, //是否允许赋值
get() { }, //获取的return的值
set(val) { } //修改的时候执行 val就是最新的值
})
使用
name: "张三",
age: 21
}
let keys = Object.keys(obj);
for (let i in keys) {
let key = keys[i];
Object.defineProperty(obj, key, {
get() {
return obj[key];
},
set(val) {
obj[key] = val;
}
})
}
obj.name = "李四";
我们需要设置一个中转data,来让set修改data的值,get在返回出data的属性值。
而不是直接修改obj导致导致递归调用,不然的话会导致栈溢出
name: "张三",
age: 21
}
let data = {}
let keys = Object.keys(obj);
for (let i in keys) {
let key = keys[i];
Object.defineProperty(obj,key,{
get() {
return data[key];
},
set(val) {
data[key] = val;
}
})
}
obj.name = "李四"