zoukankan      html  css  js  c++  java
  • 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的属性及方法
    多多关照,多多指教,共同成长 ---嘉煠
  • 相关阅读:
    Python之面向对象知识整理
    python2与python3的区别
    Gitlab 删除仓库文件夹
    Git撤销本地commit(未push)
    js库
    HTML | 打开网址后3秒跳转外链
    Vue CLI | 安装
    npm | npm淘宝镜像和查看镜像设置
    swiper | 过渡效果 effect: 'fade' 导致文字重叠
    CSS改变背景 | pattern.css
  • 原文地址:https://www.cnblogs.com/jiayeyuan/p/14439757.html
Copyright © 2011-2022 走看看