- Proxy 可以实现什么功能
ES6 的新语法
可以用于实现 Object.defineProperty
类似的功能,用于对对象的内部方法进行代理
let p = new Proxy(target, handler)
target 参数是被代理的对象,handler 对象用来自定义对象的内部方法,下表里有对对应内部方法的代理方式,handler 当中可以添加对应的处理器函数来代理对应的内部方法
内部方法 | 处理器函数 |
---|---|
[[GetPrototypeOf]] |
getPrototypeOf |
[[SetPrototypeOf]] |
setPrototypeOf |
[[IsExtensible]] |
isExtensible |
[[PreventExtensions]] |
preventExtensions |
[[GetOwnProperty]] |
getOwnPropertyDescirptor |
[[DefineOwnProperty]] |
defineProperty |
[[HasProperty]] |
has |
[[Get]] |
get |
[[Set]] |
set |
[[Delete]] |
deleteProperty |
[[OwnPropertyKeys]] |
ownKeys |
[[Call]] |
apply |
[[Construct]] |
construct |
Vue3.0 中就使用了 Proxy 为每个对象的属性添加响应式d代理,优点是:性能上更好,并且扩展了一些其他数据的监听。缺点是兼容性问题
- 对对象与数组结构的理解
ES6 提供的提取数据的模式,能够在对象和数据上取到想要的数值
(1)数组的解构
const [a, b, c] = [1, 2, 3]
/// a 1, b 2, c 3
left hand 的数组内对应位置的变量,被 right hand 的数组对应位置的值初始化
const [a,,c] = [1, 2, 3]
/// a 1, c 3
还可以通过调整 ,
的位置,空出对应的位置,只赋值给对应位置的变量
(2)对象的解构
解构对象是通过属性的名称为匹配条件,初始化相应的变量。这里即使对调位置也不会影响结果,因为对象的解构赋值以属性名为依据
const student = { name: 'Bob', age: 24 }
const { name, age } = student
- 如何提取高度嵌套的对象里的指定属性
遇到嵌套程度非常深的对象的几种写法
const school = {
classes: {
student: {
name: 'Bob',
age: 24
}
}
}
/// 逐层解构
const { classes } = school
const { student } = classes
const { name, age } = student
// name 'Bob', age 24
// 更优雅的写法
const { classes: { student: { name, age } } } = school
注意这里的 classes 和 student 因为是中间量,是不会被保留的
- 对 rest 参数的理解
ES6 的新语法,用于函数的形式参数上,把分离的参数整合成一个数组
可以用于获取多余的参数,或是处理函数参数个数不确定的情况
有 ES6 的兼容性问题,并且只能用于函数参数的末尾处,后面不能有其他的参数
function multiple(...args) {
return args.reduce((a, b) => a + b, 0)
}
multiple(1, 2, 3, 4) // 10
- 模板语法与字符串处理
用于字符串拼接
- 空格、缩进、换行都会被保留
- 支持利用操作符
${}
插入变量、表达式等等
放到函数后可以处理字符串
函数将会接收如下参数,第一个参数是一个数组,是字符串固定内容的一个数组,后面的参数数量不固定,都是插入的值。最终返回一个值,这样可以用于处理模板字符串