In JavaScript engines that support ECMAScript 2015 (aka ES6) class syntax, this can be accomplished using the new.target
meta-property:
function Node() {
if (new.target === Node) throw TypeError("new of abstract class Node");
}
or using class syntax:
class Node {
constructor () {
if (new.target === Node) throw TypeError("new of abstract class Node");
}
}
in either case, just define AttributionalNode
as:
class AttributionalNode extends Node {
constructor () {
super();
}
setAttr(attr) {
this.atText = attr;
}
}
new Node(); // will throw TypeError
new AttributionalNode(); // works fine
For a more detailed explanation of new.target
see section 4.2 of this document.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…