Class 将变量方法添加到ES6类
对于ES6类,您可以按如下方式声明方法:Class 将变量方法添加到ES6类,class,syntax,ecmascript-6,Class,Syntax,Ecmascript 6,对于ES6类,您可以按如下方式声明方法: class Foo { bar() {} } 但是,我需要从外部文件导入方法并将它们加载到类中。大概是这样的: const barMethod = require('./bar'); class Foo { bar: barMethod } 然而,这不起作用。我已经环顾了一下这个的语法,但实际上并没有提到它。正确的方法是什么 有没有办法扩展这个类?因为这个类太大了,为了便于组织,我将它分解成几个文件,但是每个方法都需要能够使用th
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
类原型中,最终得到一个主类
请记住,方法只是原型对象上的函数,即使使用ES6class
语法声明该类也是如此。它们可以通过仅对对象属性进行操作的常规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-ES6class
关键字是将东西放在prototype上的好语法。底层实现仍然是一样的。@dthree-这回答了你的问题吗?是的,谢谢!