深入浅出Vue.js(四) 整体流程

整体流程

vm.$set(target,key,val)

function set(target,key,val){
    //有效的下标
    if(Array.isArray(target) && isValidArrayIndex(key)){
        target.length = Math.max(target.length,key)
        target.splice(key,1,val)
        return val
    }
    if(key in target  && !(key in Object.prototype)){
        target[key] = val
        return val
    }
    const ob = target.__ob__
    if(target.isVue || (ob && ob.vmCount)){
        return val
    }
    if(!ob){
        target[key] = val
        return val
    }
    defineReactive(ob.value,key,val)
    ob.dep.notify()
    return val
}

vm.$delete(target,key)

function del(target,key){
    if(Array.isArray(target) && isValidArrayIndex(key)){
        target.splice(key,1)
        return
    }
    const ob = target.__ob__
    if(target.isVue || (ob && ob.vmCount)){
        return
    }
    // 如果key不是target自身的属性,则终止程序继续执行
    if(!hasOwn(target,key)){
        return
    }
    delete target[key]
    // 如果ob不存在(判断target是不是一个响应式数据),则直接终止程序
    if(!ob){
        return
    }
    ob.dep.notify()
}

  

 

 

 未完待续...

深入浅出Vue.js(四) 整体流程

上一篇:【转】怎样查出SQLServer的性能瓶颈


下一篇:jQuery基础及选择器