gpt4 book ai didi

javascript - 如何在无法实例化的 JavaScript 中创建抽象基类

转载 作者:IT王子 更新时间:2023-10-29 03:21:28 25 4
gpt4 key购买 nike

我有课

function Node() {
//implementation
}

和另一个类

function AttributionalNode() {
this.prototype.setAttr = function (attr) {
this.atText = attr;
};
}

AttributionalNode.prototype = new Node();
AttributionalNode.prototype.constructor = AttributionalNode;

如何使类 Node() 无法实例化?例如,当我尝试

var node = new Node();

所以它抛出异常?

最佳答案

在支持 ECMAScript 2015(又名 ES6)类语法的 JavaScript 引擎中,这可以使用 new.target 元属性来完成:

function Node() {
if (new.target === Node) throw TypeError("new of abstract class Node");
}

或使用类语法:

class Node {
constructor () {
if (new.target === Node) throw TypeError("new of abstract class Node");
}
}

无论哪种情况,只需将 AttributionalNode 定义为:

class AttributionalNode extends Node {
constructor () {
super();
}
setAttr(attr) {
this.atText = attr;
}
}

new Node(); // will throw TypeError
new AttributionalNode(); // works fine

有关 new.target 的更详细说明,请参阅 this document 的第 4.2 节.

关于javascript - 如何在无法实例化的 JavaScript 中创建抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com