icarusion/vue-book

自定义指令中 v-clickoutside 里的奇怪写法

OuYangJinTing opened this issue · 4 comments

Vue.directive('clickoutside', {
  bind (el, binding, vnode) {
    function documentHandler (e) {
      if (el.contains(e.target)) {
        return false;
      }

      if (binding.expression) {
        binding.value(e);
      }
    }

    el.__vueClickOutside__ = documentHandler;
    document.addEventListener('click', documentHandler);
  },
  unbind (el, binding) {
    document.removeEventListener('click', el.__vueClickOutside__);
    // 下面这行代码是啥,调用 delete 方法吗?但为什么又不用括号呢?
    delete el.__vueClickOutside__;
  }
})
jhxxs commented

下面这段代码用来删除元素上挂载的__vueClickOutside__方法

怎么写法这么奇怪

js删除对象属性的语法就是这样的,
delete object.property
delete object['property']
你可以去MDN查看delete操作符

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete#Syntax
js 原来还有这语法,长见识了,不过这语法我喜欢,跟 ruby 一致