vue源码-变化侦测篇(小知识点)

变化侦测概念
变化侦测就是追踪状态,亦或者说是数据的变化,一旦发生了变化,就要去更新视图。
在Angular中是通过脏值检查流程来实现变化侦测;在React是通过对比虚拟DOM来实现变化侦测,而在Vue中也有自己的一套变化侦测实现机制。
Object.defineProperty方法
会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
不可枚举属性
for..in..遍历打印属性
function Person() {
this.name = "Ykx";};let ykx = new Person();
    Object.defineProperty(ykx, "sex", {
value: "male",
//是否为枚举属性
enumerable: false});
 
console.log(ykx);
for(let p in ykx) {
console.log("for...in遍历 = " +p);//name
}
console.log("sex = "+ykx.sex)
 
function Person() {
this.name = "Ykx";};
let ykx = new Person();Object.defineProperty(ykx, "sex", {
value: "male",
//是否为枚举属性
enumerable: false});Object.getOwnPropertyNames(ykx).forEach(function(key) {
console.log(key)//name ,sex
});
如果用Object.getOwnPropertyNames方法的话可以遍历到它所有的属性,包括可枚举和不可枚举的属性。
Q:为什么设置不可枚举属性?
A:设置为不可枚举后,for in 就无法获取到对象上对应的属性。比如有些场景下你不希望这个属性被获取到。
js的call属性
它可以用来调用所有者对象作为参数的方法。
通过 call(),您能够使用属于另一个对象的方法。
const value = getter ? getter.call(obj) : val
.call方法是将obj的属性  getter可以使用obj的属性及方法
posted @ 2021-02-24 10:15  嘉煠  阅读(82)  评论(0编辑  收藏  举报