TypeScript:是否有任何其他方法来检测从相似 class 实例化的两个对象?

TypeScript: Are there any other ways to detect that two object instantiated from similar class?

在没有 instanceof 运算符的情况下检测从相似 class 实例化的两个对象是否是打字稿中的正确方法?

abstract class CommonText {}
class BoldText {} extends CommonText
class ItalicText {} extends CommonText

const someBoldText = new BoldText("I like");
const anotherBoldText = new BoldText("cookies");
const italicText = new ItalicText("cursive");

//Comparison
if(someBoldText.constructor === anotherBoldText.constructor) {
  // Run operation
}
if(someBoldText.constructor === italicText.constructor) {
  // Should not be executed
}

效果很好,但有点丑,我觉得有更好的方法。

子问题:你能解释一下在这种情况下到底比较了什么吗?它是一个指针吗?还是签名?

我正在尝试使用 typescript 和 Vue.js 创建 WYSIWYG 编辑器作为学习 typescript 的项目。总体思路是使用自定义处理程序重新创建常见的浏览器行为。我已经停止了文本样式并且一切正常,但是数据优化存在问题,最终导致具有相同样式的兄弟姐妹。例如:Scheme。因此,当两个对象具有相同的样式时,它们应该合并为一个。

你可以阅读详尽的解释here,但简而言之:

The constructor property returns a reference to the Object constructor function that created the instance object. Note that the value of this property is a reference to the function itself, not a string containing the function's name.

对于使用 new SomeClass(...) 语法创建的对象,.constructor 字段将为 SomeClass。由于 JavaScript 与引用一起使用(对于布尔值等非基元),这是一个引用。因此,您正在检查两个值是否使用相同的 class.

实例化

那篇文章还提到了.constructor字段可以被覆盖之类的,所以你可以随意制作它。 instanceof 运算符实际上遍历对象的原型链,尽管它使用右侧值的 .constructor 属性。


对于您的用例,我不确定对 italic/bold 使用 classes 是否是个好主意。如果您不允许在样式文本中嵌套样式文本,至少不会。如果您想将文本格式化为斜体和粗体怎么办?如果您想要在红色(粗体)文本中间显示绿色粗体文本怎么办?拥有一个具有一组(CSS?)属性的通用 StyledText class 可能会更好,例如它是否是 bold/italic,文本 size/color等。然后您可以合并具有相同样式的连续 StyledText 个对象。