super.format 是什么?

what is super.format in quill?

我对这里的语法很困惑:超递归方式的作用。

在下面的代码中,super.format 写在名为“format”的函数中。当我搜索 super 的定义时,它是父级 class,我猜这里是 LinkBot。而这个 LinkBot class 有一个叫做格式的功能。所以,在我看来这是用递归的方式做的。

而且 super.formats() 是在 formats() 中定义的,这对我来说真的很尴尬..

谁能帮我看看这是什么..?

期待找到从这片丛林中拯救出来的人..

import Parchment from 'parchment';

class LinkBlot extends Parchment.Inline {
  static create(url) {
    let node = super.create();
    return node;
  }

  static formats(domNode) {
    return domNode.getAttribute('href') || true;
  }

  format(name, value) {
    if (name === 'link' && value) {
      this.domNode.setAttribute('href', value);
    } else {
      super.format(name, value);
    }
  }

  formats() {
    let formats = super.formats();
    formats['link'] = LinkBlot.formats(this.domNode);
    return formats;
  }
}

Parchment.register(LinkBlot);

它与 class 的工作原理更相关。我只是以你的 class 为例,以免让你不知所措。

//     Child class    Parent Class
class LinkBlot extends Parchment.Inline {
}

是的,超级指代 parent class 口头意思是 Parchment.Inline.

Parent class - Parchment.Inlinecreate()format()formats() 方法

class Parchment.Inline {
   create() { ... }
   format(name, value) { ... }
   formats() { ... }
   ...
}

Child class LinkBlot 通过使用 extends[=23= 继承了 Parchment.Inline (Parent class) 的功能]

举个例子,您可能从 mother/father 继承了一些 skills/behaviours,例如:

  • 每周收拾屋子。

同时,您可以进化并覆盖他们的 skills/behaviours 以拥有您自己的版本

  • 如果我有精力,就用我自己的版本
    • 每天收拾屋子
  • 但如果我累了,就按parent的方式做
    • 每周收拾屋子。

LinkBlot 正在做同样的事情,它覆盖 parent format() 以拥有自己的 format().[=23 版本=]

  • if (name === 'link' && value),按我自己的方式做
    • this.domNode.setAttribute('href', 值);
  • 如果没有,使用parent版本
    • super.format(名称, 值);
class LinkBlot extends Parchment.Inline {
  ...

  // overriding parent format() and create my own version
  format(name, value) {
    // if the following conditions meet, use my logic to set domNode attribut.
    if (name === 'link' && value) {
      this.domNode.setAttribute('href', value);
    } else {
      // Otherwise, use the parent version
      super.format(name, value);
    }
  }
}

同样的原则也适用于formats()create()