前先阅读上一篇
你不知道的js—对象(1) 书接上文
Getter和Setter
get和set设置时,和描述符一样。Vue2.0的响应时就是这样实现的。
const obj = { a: 1 }
Object.defineProperty('a',
{
get:function() {
console.log('访问了a')
return 10
},
set: function(val) {
console.log('设置a为' + val)
}
}
)
console.log(obj.a); // 访问了a // 10
obj.a = 2; // 设置a为2
- 访问a时,执行了get。访问到的值是get返回的值;
- 给a赋值时,执行了set。set函数的参数是新的值;
存在性
如果想知道对象中是否存在某个属性,应该怎么做?
const obj = { a: 1 }
console.log('a' in obj) // true
console.log('b' in obj) // false
console.log(obj.hasOwnProperty('a')) // true
console.log(obj.hasOwnProperty('b') // false
...in...和hasOwnProperty的区别是:
- ...in...会遍历到原型链上的属性(必须时可枚举的)
- hasOwnProperty只验证自身是否有该属性
枚举
- ...in...会遍历到原型链上的属性(必须时可枚举的)
- Object.keys(..)会返回一个数组,包含所有可枚举属性(自身的属性)
- Object.getOwnPropertyNames(..)会返回一个数组,是否可枚举属性都会存在(自身的属性)
- Object.getOwnPropertySymbols(..)会返回一个数组,获取Symbols类型的属性
遍历
数组的遍历很复杂,涉及到生成器Generator,以后单写一篇文章吧!