Appearance
delete
javascript
// 删除对象的 property, 如果对象是响应式的, 确保删除能触发视图更新。
// 如果是基本数据类型,警告。如果是数组并索引合法,直接调用 splice 删除,实现视图更新。
// 否则取出对象的 ob,如果 target._isVue 为真 或 ob.vmCount 为真说明要删除的对象是
// vm 或 data,直接警告。否则 Object.hasOwnProperty 判断对象自身中是否存在要删除的
// 属性,如果不存在,直接返回。否则通过 delete 删除该属性,最后如果 ob 为真就
// ob.dep.notify 通知视图更新。
Vue.delete = function del (target, key) {
if (isUndef(target) || isPrimitive(target)) {
// warn
}
if (Array.isArray(target) && isValidArrayIndex(key)) {
target.splice(key, 1); // 变更方法
return
}
var ob = (target).__ob__;
if (target._isVue || (ob && ob.vmCount)) {
// warn
return
}
// 删除一个不存在的属性
if (!hasOwn(target, key)) {
return
}
// 删除
delete target[key];
if (!ob) {
return
}
// 通知视图更新
ob.dep.notify();
}