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.Inline
有 create()
、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()
。
我对这里的语法很困惑:超递归方式的作用。
在下面的代码中,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.Inline
有 create()
、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()
。