Vee$deleteとdeleteの違い

961 ワード

deleteはjsのオリジナルメソッドです.言語の制限のため、$deleteがvueで提供するインスタンスメソッドであることに応答するコールバックを設定できません.ソースコードは次のとおりです.
function del (target, key) {
    if (isUndef(target) || isPrimitive(target)
    ) {
      warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
    }
    if (Array.isArray(target) && isValidArrayIndex(key)) {
      target.splice(key, 1);
      return
    }
    var ob = (target).__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
      warn(
        'Avoid deleting properties on a Vue instance or its root $data ' +
        '- just set it to null.'
      );
      return
    }
    if (!hasOwn(target, key)) {
      return
    }
    delete target[key];
    if (!ob) {
      return
    }
    //                
    ob.dep.notify();
  }

vueインスタンスの$deleteはいくつかの境界状況を処理し,配列とオブジェクトの削除を処理し,最も重要なのは変数上のobポインタが指す観察者インスタンスを取得し,depに依存するwatcher更新を通知することである.