Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中从另一个类调用方法函数_Javascript - Fatal编程技术网

如何在Javascript中从另一个类调用方法函数

如何在Javascript中从另一个类调用方法函数,javascript,Javascript,我知道如何在Java中从另一个类调用方法函数,但在Javascript中却不知道 fileA.js class A { method1(){ //some code method2(); } constructor(){ //some code } render(){ //some code } } class B{ method2(){

我知道如何在Java中从另一个类调用方法函数,但在Javascript中却不知道
fileA.js

class A {
     method1(){
          //some code
          method2();
     }
     constructor(){
          //some code
     }
     render(){
          //some code
     }
}
class B{
     method2(){
          //some code
     }
}
fileB.js

class A {
     method1(){
          //some code
          method2();
     }
     constructor(){
          //some code
     }
     render(){
          //some code
     }
}
class B{
     method2(){
          //some code
     }
}
另外请注意,我在index.html中包含了fileA.js和fileB.js。
另外,如果你想结束这个问题,请让我知道我的问题的答案,因为我还没有找到一个类似的问题在这里。
我的看法:- 我曾想过使用
类A扩展B{}
,但没有成功。
然后我想我可能可以在fileA.js中使用
import method2 from fileB.js
语句,但它也失败了。

您可以创建
B
的实例并调用该方法:

A类{
方法1(){
常数b=新的b();
b、 方法2();
}
}
B类{
method2(){console.log('B-method2');}
}
常数a=新的a();

a、 方法1()假设您不想实例化类B,您可以通过类B的原型访问method2(或者,您可以使用中所述的静态方法),例如:

文件B.js:

B类{
方法2(){
//一些代码
控制台日志(“B/方法2”);
}
/*您也可以使用静态方法:
静态方法2(){
//一些代码
控制台日志(“B/方法2”);
}
*/
}
导出默认值B;
文件A.js:

从“/B.js”导入B;
甲级{
方法1(){
//一些代码
控制台日志(“A/方法1”)
B.prototype.method2();
/*如果使用“静态”方法,则原型是无用的:
B.方法2();
*/ 
}
构造函数(){
//一些代码
}
render(){
//一些代码
}
}
导出默认值A;
文件index.html:


从“/A.js”导入一个文件;
设aObject=newa();
aObject.method1();
将产生以下输出:

A / method 1
B / method 2

注意:您需要从服务器上运行
index.html
。模块不能在
文件上工作://
类只不过是对象的一般定义。不能从类本身调用类方法。您需要从该类实例化一个对象,然后才能调用该对象上的类方法

B类{
方法2(){
log(“objectB中调用的method2”);
}
}
甲级{
方法1(){
log(“objectA中调用的method1”);
var objB=新的B();
objB.method2();
}
构造函数(){
//一些代码
}
render(){
log(“在调用的objectA中呈现”);
}
}
var objectA=新的A();
var objectB=new B();
objectA.method1();

objectA.render()这将为您解决问题,请告诉我

class A {
  constructor() {

  }

  bro() {
    console.log('bro')
  }
}

class B extends A {
  g() {
    this.bro()
  }
}

new B().g()
在这里,当B扩展A时,它可以访问A中的所有方法,包括
bro
。调用
this.bro()
类似于从类
B
中调用
B.bro
,这是指类本身。类似于说一些类似于
self.bro
的话,也就是说,我现在使用的
bro
方法,因为我是
A
的扩展


在这种情况下,我假设
A
B
在某种程度上是相关的,并且我们试图调用的方法确实属于它所在的类。

如果您想调用类的方法而不实例化它,您必须使用static关键字

static关键字定义类的静态方法或属性。 既不能调用静态方法,也不能调用静态属性 类的实例。相反,它们是在类本身上调用的


请分享更多细节。到目前为止你试过什么?你被困在哪里了?嘿,你想从哪里调用什么方法?你想实现什么?更多的上下文将有助于有效地回答您的问题。我想过使用类A扩展B{}。。但是它不起作用。。另外,尝试在fileA.js中使用import语句,但没有成功。这些类之间的关系是什么?您可以执行
(新的B).method2()
,但是
B
的实例与此相关吗?您可以将
method2
放入一个实用程序文件。您的代码不会创建任何a或B实例。如果不了解您计划如何创建实例,我们就无话可说了。你应该让这个问题更具体,这样我们才能理解你的目标是什么。什么是“这”?请在你的答案中添加一些解释,以便其他人可以从中学习。另外,随机扩展其他类的原因是什么?如果您想从另一个类C调用方法,该怎么办?如果你想滥用OOP,为什么不把所有的东西都写在一个类中呢?这是指调用它的作用域的对象。在本例中,它指的是B类的范围,它现在可以访问
bro
方法,因为它继承自父类
B
。请通过编辑itHaha为您的问题添加所有澄清,没有理由过度寻找问题的解决方案@NicoHaase,有更好的方式与人相处。在这种情况下,我假设
A
B
在某种程度上是相关的&我没有过度优化当前不存在的问题。我们有一个简单的a-B问题,C甚至还没有被创建,但我们已经在担心
如果发生了什么
。如果有另一个类C,我们可以重新考虑我们想要调用的方法是否真正属于C,如果它属于C,我们可以在A中初始化C并调用该方法,否则我们只是担心当前类A中不存在的问题,类B在两个不同的js文件中定义。我尝试了原型方法,但不起作用。我编辑了我的答案,以澄清如何使用导出/导入和原型