[Symbol(‘es’)]不太能理解到
来源:3-14 代理Proxy(上)
Panda_io
2020-11-09
问题(1)请问老师这里的代理方法为什么会被调用两次?第二次还传入了“length”
let arr1 = []
arr1 = new Proxy(arr1,{
set(target,prop,val){
console.log(target,prop,val)
if(typeof val === 'number'){
target[prop] = val
return true
}else {
throw new Error('请传入number类型的数值')
}
}
})
arr1.push(4)
arr1.push(6)
问题(2)老师请问这里的Symbol为什么要加[ ],老师说Symbol是一种基本数据类型,加[]表明它是一个变量,我们要用变量的值来作为对象的key,我理解的基本数据类型 != 变量,这里就很懵逼。
//ownKeys
let obj3 = {
name: 'imooc',
[Symbol('es')]:'es'
}
console.log(Object.getOwnPropertyNames(obj))
写回答
1回答
-
谢成
2020-11-10
1、使用 push 方法给数组添加值的时候,length 属性会自动增加,所以也会拦截到length属性的变化
2、这是对象的属性名表达式的写法,这样拆开下应该更好理解:
const s = Symbol('es');
const obj = {
name: 'imooc',
[s]: 'es'
};
012020-11-10
相似问题