标签:code 删除 ever 开始 nan 工作 必须 https obs
Vue不支持IE8及以下浏览器是由于低版本浏览器不支持defineProperty是ES5新方法
组件init阶段,Vue的data属性会被Observe类reactive化,即加上getter和setter函数,并建立依赖Dep
function observe(obj){
if(!obj || typeof obj !== object){
return
}
Object.keys(obj).forEach(key=>{
defineReactive(obj,key,obj[key])
})
function defineReactive(obj,key,value){
observe(value)
Object.defineProperty(obj,key,{
enumerable:true,
configurable:true,
get:function(){
// 依赖收集
return value
},
set:function(){
observe(newValue)
if(newValue !== value){
value = newValue
//派发更新
}
}
})
}
}
// 动态添加响应式属性
Vue.set(vm.person,‘age‘,18)
// 删除响应式属性
Vue.delete(vm.person,‘name‘)
// 不能再根级别添加响应式属性
Vue.set(vm,‘count‘,12)
push、pop、shift、unshift、slice、sort、reverse
// 错误方法:
vm.items[index] = newVal
// 修正方法:
Vue.set(vm.items,index,newVal) or vm.items.splice(index,1,newVal)
// 错误方法:
vm.items.length
// 修正方法:
vm.items.splice(items.length)
常见宏任务:
setTimeout、setInterval、setImmediate、script、MessageChannel
常见微任务:
Promise、MutationObserver、Object.observe(废弃)、process.nextTick(node)
DOM更新也是一个微任务
标签:code 删除 ever 开始 nan 工作 必须 https obs
原文地址:https://www.cnblogs.com/nanhuaqiushui/p/13378421.html