Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 模块化JS中的类扩展_Javascript_Class_Ecmascript 6_Extension Methods - Fatal编程技术网

Javascript 模块化JS中的类扩展

Javascript 模块化JS中的类扩展,javascript,class,ecmascript-6,extension-methods,Javascript,Class,Ecmascript 6,Extension Methods,假设我有一个通用类模块: 导出类MyCalc{ 数据={} ... } 我想扩展更多功能: 导出类MyCalcLoader{ 加载=一些\u数据=>{ this.data=一些_数据; } } 导出类MyCalcUI{ 打印=()=>{ document.write(JSON.stringify(this.data)); } } 扩展MyCalc并使用这些扩展/插件的适当方式是什么 从“/MyCalc.js”导入{MyCalc}; 从“/MyCalcLoader.js”导入{MyCalcLo

假设我有一个通用类模块:

导出类MyCalc{
数据={}
...
}
我想扩展更多功能:

导出类MyCalcLoader{
加载=一些\u数据=>{
this.data=一些_数据;
}
}
导出类MyCalcUI{
打印=()=>{
document.write(JSON.stringify(this.data));
}
}
扩展
MyCalc
并使用这些扩展/插件的适当方式是什么

从“/MyCalc.js”导入{MyCalc};
从“/MyCalcLoader.js”导入{MyCalcLoader};
从“/MyCalcUI.js”导入{MyCalcUI};
//TODO:MakeMyCalcExtendLoaderAndUi();
BankingCalc类扩展了MyCalc{
配置={…}
构造函数(){
超级();
}
}
const banking_calc=新银行计算();
银行业计算负荷({…});
银行业务计算打印();
我已经考虑过几种不同的janky方法来实现这一点,但我相信这已经足够普遍了,而且香草ES6有一种正确的方法来实现这一点。

你可以使用Mixin:

 export const MyCalcLoader = Super => class MyCalcLoader extends Super {
  load = some_data => {
    this.data = some_data;
  }
 }

 export const MyCalcUI = Super => class MyCalcUI extends Super {
   print = () => {
     document.write(JSON.stringify(this.data));
  }
}
然后将类组合为:

 class BankingCalc extends MyCalcLoader(MyCalcUI(MyCalc)) {
  //...
 }

哦,那是克里弗。现在查看“js mixins”,看看您可以创建一个函数,将每个扩展的所有原型分配给原始类。在尺寸上试试这个。@phil使用原型会让你在构造器上遇到麻烦。这就是我所想的。所以我也做了这件事,它成功了:
const banking_calc=new(MyCalcLoader(MyCalcUI(MyCalc))({…config})@phil如果你只需要一个实例,那么是的。如果需要多个实例,则应声明一个类(否则实例具有不同的原型链,这对性能不利)