【问题标题】:Accessing all methods from es6 class from another one从另一个类访问 es6 类的所有方法
【发布时间】:2018-07-04 18:57:54
【问题描述】:

我有 2 个课程:MyClass 和 CBook。我想从 CBook 类中访问 MyClass 类的所有函数和变量。我该怎么做?

我的班级

import $ from 'jquery';
import {CBook} from './book';

const path = "http://www.mypage.com";

class MyClass {

    constructor() {
        let _summaryPageUI = new CBook(this);
    }

    describeBook() {
        console.log('test');
    }

}

new MyClass();

export {MyClass};

我想在 CBook 中访问 MyClass 中的所有方法:

CBook

class CBook {
    constructor(myClass) {
        console.log(myClass);
    }
}

export {CBook};

【问题讨论】:

  • 如果你的目的是两个类共享方法,使用接口模式的方法。
  • 您可以访问该 MyClass 实例的所有方法和属性。你还想要什么?最重要的是,为什么?
  • 在全球范围内,我可以从 CBook 类中调用 MyClass 的任何方法。在我的示例中,我在构造函数中传递了“this”,但也许这不是好的解决方案?
  • 只需在CBook 构造函数中使用myClass.describeBook()(和其他任何东西)?目前尚不清楚您所说的“有权访问”是什么意思。请发布一些示例代码,说明您希望如何使用这些类以及您期望从中获得什么输出。

标签: javascript ecmascript-6 es6-class


【解决方案1】:
class MyClass {
  constructor() {
    console.log("MyClass instantiated");
  }
  describeBook() {
    console.log("book described");
  }
}


class CBook extends MyClass {
  constructor() {
    super();
    console.log("CBook instantiated");
  }
}

然后你就可以做到:

const book = new CBook();
book.describeBook();

你会得到输出:

MyClass instantiated
CBook instantiated
book described

【讨论】:

    【解决方案2】:

    基于您使用“函数”的术语 - 我认为您希望将函数定义为静态,以便可以在类而不是实例上调用:

    定义:

    class foo {
        static someFunc() { console.log("foo:someFunc") }
    }
    

    呼叫:

    foo.someFunc();
    

    控制台输出:

    foo:someFunc
    

    价值观

    在类定义之后添加

    foo.someValue = "myValue";
    

    然后:

    console.log(foo.someValue)
    

    将输出:myValue

    【讨论】:

      【解决方案3】:

      在 ES6 中,所有类实例方法都是公共的,因此您可以通过创建 MyClass 的实例并像这样调用它的方法来访问它们:

      class CBook {
        constructor(myClass) {
          this.myClass = myClass;
        }
      
        someMethod() {
          this.myClass.describeBook()
        }
      }
      

      【讨论】:

        【解决方案4】:

        构造函数是在创建类(对象)的新实例时立即调用的函数。这将初始化对象的初始属性和状态。正如 XPX-Gloom 所指出的,您使用 extends 关键字隐式地说“CBook 对象,在实例化时采用 MyClass 的全部或部分属性”。通过使用 super(),您正在调用 MyClass 的构造函数。这个“超级”关键字用于进行超级构造函数调用并允许访问父方法。 example

        【讨论】:

          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 2022-12-05
            • 1970-01-01
            • 1970-01-01
            • 2015-01-21
            • 2017-01-03
            • 2017-05-12
            • 1970-01-01
            • 1970-01-01
            • 2012-03-19
            相关资源
            最近更新 更多