Class 将变量方法添加到ES6类

Class 将变量方法添加到ES6类,class,syntax,ecmascript-6,Class,Syntax,Ecmascript 6,对于ES6类,您可以按如下方式声明方法: class Foo { bar() {} } 但是,我需要从外部文件导入方法并将它们加载到类中。大概是这样的: const barMethod = require('./bar'); class Foo { bar: barMethod } 然而,这不起作用。我已经环顾了一下这个的语法,但实际上并没有提到它。正确的方法是什么 有没有办法扩展这个类?因为这个类太大了,为了便于组织,我将它分解成几个文件,但是每个方法都需要能够使用th

对于ES6类,您可以按如下方式声明方法:

class Foo {

  bar() {}

}
但是,我需要从外部文件导入方法并将它们加载到类中。大概是这样的:

const barMethod = require('./bar');

class Foo {

  bar: barMethod

}
然而,这不起作用。我已经环顾了一下这个的语法,但实际上并没有提到它。正确的方法是什么


有没有办法扩展这个类?因为这个类太大了,为了便于组织,我将它分解成几个文件,但是每个方法都需要能够使用
this
引用这个类

也许可以混合?

您可以从
Foo
实例
bar
属性中
.call()
barMethod
,可以选择将
this
设置为
this
Foo
实例

class Foo {
  bar() {
   barMethod.call(this)
  }
}
您可以从
Foo
实例
bar
属性中
.call()
barMethod
,可以选择将
this
设置为
this
Foo
实例

class Foo {
  bar() {
   barMethod.call(this)
  }
}

ES6中的
类仍然使用
.prototype
,因此您可以通过向“.prototype”中添加方法来扩展类声明后的类定义

原始声明:

class Foo {
  bar() {}
}
添加一些新方法:

Foo.prototype.newBar = someNewMethod;
或者,以一种更模块化的方式,您可能只想将
Foo
传递给它的模块构造函数中的每个模块,它只需将其方法添加到
Foo.prototype

或者,每个模块都可以用自己的方法集定义自己的类(所有设计最终都是
Foo
方法,然后您可以使用一个主函数导入所有子定义,并将每个导入的类中的所有方法复制到主
Foo
类原型中,最终得到一个主类


请记住,方法只是原型对象上的函数,即使使用ES6
语法声明该类也是如此。它们可以通过仅对对象属性进行操作的常规Javascript分配给其他对象。

ES6中的A
仍然使用
.prototype
,因此可以扩展c通过向“.prototype”添加方法,在其声明之后添加lass定义

原始声明:

class Foo {
  bar() {}
}
添加一些新方法:

Foo.prototype.newBar = someNewMethod;
或者,以一种更模块化的方式,您可能只想将
Foo
传递给它的模块构造函数中的每个模块,它只需将其方法添加到
Foo.prototype

或者,每个模块都可以用自己的方法集定义自己的类(所有设计最终都是
Foo
方法,然后您可以使用一个主函数导入所有子定义,并将每个导入的类中的所有方法复制到主
Foo
类原型中,最终得到一个主类


请记住,方法只是原型对象上的函数,即使使用ES6
class
语法声明该类也是如此。它们可以通过仅对对象属性进行操作的常规Javascript分配给其他对象。

这是一个想法。不幸的是,我必须导入大约50个函数。这其中有什么内容吗扩展类的行?编辑过的问题。@d您需要编写某种形式的代码。可以使用几种方法。您只需创建一个JavaScript函数并返回一个对象,将
Foo
设置为
this
,或者使用一组对象来设置
Foo
实例
设foo=Object.assign(new foo(),…[{bar:function(){console.log(123,this)}}},{fn:function(){console.log(“abc,this)}},]);foo.bar()
这是一个想法。不幸的是,我必须导入大约50个函数。是否有扩展类的方法?编辑的问题。@d您将需要编写某种形式的代码。有几种方法可以使用。您只需创建一个JavaScript函数并返回一个设置为
Foo
的对象即可
this
,或者使用一个对象数组来设置
Foo
实例
let Foo=Object.assign(new Foo(),…[{bar:function(){console.log(123,this)}}},{fn:function(){console.log(“abc,this)},]);Foo.bar()
除此之外,我认为您可能需要以另一种方式拆分类,例如,一些较小的类包含函数。应该可以只编写
Foo.prototype.bar=require('./bar')
但我现在无法测试它。除此之外,我相信您可能需要以另一种方式拆分类,例如,一些较小的类包含函数。应该可以只编写
Foo.prototype.bar=require('./bar'))
但我现在无法测试它。我实际上不知道这一点!我以为这是一个比原型全新的实现!@dthree-ES6
关键字只是用于将东西放到原型上的好语法。底层实现仍然是一样的。@dthree-这回答了你的问题吗?是的,谢谢!我确实回答了我不知道!我以为这是一个比prototype全新的实现!@dthree-ES6
class
关键字是将东西放在prototype上的好语法。底层实现仍然是一样的。@dthree-这回答了你的问题吗?是的,谢谢!