【问题标题】:Vanilla Javascript extends class and use it on pageVanilla Javascript 扩展类并在页面上使用它
【发布时间】:2020-10-21 07:10:03
【问题描述】:

我正在使用 vanilla JS(无节点)

我在 2 个不同的文件中有 2 个类。 User.js 和 Admin.js 然后我得到了 MainController.js 和 index.php。

我想将import 用户转为管理员并扩展管理员。然后通过这两个类扩展 mainController 并在页面上使用它的代码。问题是当我尝试在 mainController 中扩展任何 class 时,它未定义,我无法在页面上使用它。除非我只导入它而不扩展任何类,否则我可以启动用 mainController 编写的函数,但我无法从脚本或控制台访问它。

我想将所有类从 User 和 Admin 导入 MainController 并在页面上使用它,这样索引就不会有多个脚本标签。

如果所有文件都在 1 个文件中,那么将所有内容添加到 1 个类并使用它不会有问题。问题在于多个文件。

例子:

用户

class User {
constructor(username, email){
    // Set up properties
    this.username = username;
    this.email = email;
    this.score = 0;
}.....

管理员

import User from './user.js';
export default class Admin extends User {

constructor(username, email, title){
    super(username, email);
    this.title = title;
}....

主控制器

import User from './user'
import Admin from "./admin";
class mainController extends User & Admin {

constructor(username, email, title){
    super(username, email);
    this.title = title;
}
}

索引.php

<script src=maincontroller.js></script>
<script> const xxx = new User()...</script>

【问题讨论】:

  • 什么是mainController extends User &amp; Admin
  • 你的imports 有用吗?除非您为模块使用转译器,否则它们不应该。在我看来,这不是继承问题。
  • 节点是“香草”javascript。它只是一个运行 JS 的框架。
  • @adiga。这只是我想要达到利亚姆的一个例子。我知道,但我更喜欢保持简单,所以没有节点

标签: javascript oop inheritance


【解决方案1】:

您尝试实现class 继承的方式有问题。 Admin 已经是 extends User,因此没有必要尝试指定第三个 class extends Admin 也需要扩展 User。当您声明第三个class 扩展Admin 时,已经指定了这一点,因为Admin extends User

因此,&amp; 在语法上无效且在逻辑上是不必要的,语法修复:

class mainController extends Admin {

    constructor(username, email, title){
        super(username, email);
        this.title = title;
    }
}

话虽如此,我们需要了解mainControllerAdmin 的名称在class 层次结构方面似乎完全不相关,因为mainController 似乎是一个控制器,而User/@ 987654341@ 似乎是模型类。所以,对我来说,您似乎希望mainControllerUser/Admin 对象一起操作,并且您似乎认为您需要扩展这些类才能实现这一点。如果我是对的,那么在mainController 中,您可能需要将这些类的实例用作参数/变量/数据成员。

【讨论】:

  • 所以如果我做对了,mainController 就没有意义了。我仍然在 index.php 中使用管理类时遇到问题。我把它作为
  • @Virus mainController 不一定毫无意义。从它的名字来看,你似乎不需要用它来扩展 Admin。当您说一个类扩展另一个类时,一般规则是扩展另一个类的类是更一般类的特定子案例。 Admin 是 User,因此 Admin 扩展 User 是有意义的。但 mainController 并不是真正的管理员。您能向我们展示您在脚本中放置的标记部分吗?
  • 我可以显示,但我在主控制器中所做的只是导入用户和管理员。我不写另一个类,也没有更多的代码。我只是想将两者都添加为 1 个脚本标签而不是几个。在你的cmets之后我明白了,它没有意义。多谢 4 解释
  • 我想知道您是如何将脚本标签放入@Virus 结构中的。也许那个时候有问题。
猜你喜欢
  • 2014-12-09
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2011-12-05
  • 2021-08-11
  • 2015-12-24
相关资源
最近更新 更多