【问题标题】:Is it okay to declare a new subclass as a prototype method in JavaScript?可以在 JavaScript 中将新的子类声明为原型方法吗?
【发布时间】:2023-03-14 01:56:01
【问题描述】:

我有一个有几个嵌套子类的类,但我不确定正确的语法应该是什么。这就是我想做的事情。效果很好,但可能不是最佳编码实践。

function AClass() {
    this.myB = new BClass();
}

AClass.prototype.BClass() {
    this.myC = new CClass();
}

AClass.prototype.BClass.prototype.CClass() {
    // C constructor
}

【问题讨论】:

  • 您所做的不是子类化。是组成。在.prototype 上有构造函数没有什么意义。如果这就是你想要的,只要让这些函数独立,如果你愿意,可以将它们隐藏在 IIFE(模块模式)中。

标签: javascript prototype prototypejs


【解决方案1】:

如果您的嵌套类只能与主类一起使用,您可以将它们定义为主类的(静态)属性。没有理由让它们在每个实例上都可用。

function MainClass() {
    this.myB = new MainClass.SubClassB();
}

MainClass.SubClassB = function() {
    this.myC = new MainClass.SubClassC();
}

MainClass.SubClassC = function() {
    // C constructor
}

MainClass.SubClassC.prototype.sayHi = function(){ 
    console.log('Hi from C');
}


var myInstance = new MainClass();
myInstance.myB.myC.sayHi();

*) 请注意,嵌套类与您的主类没有继承关系。正如评论中提到的@squint,您似乎想要的模式是组合,而不是继承。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2019-07-04
    相关资源
    最近更新 更多