模块的继承

看阮一峰 ES6教程,模块的继承部分。没看到有继承,子模块和父模块没有重名的函数或者属性,也没有从子模块访问父模块的东西。

所以自己做了个例子,验证。说实话,我只看到了调用链,没看到有继承。

// circle.mjs

export function area(radius) {
  return Math.PI * radius * radius;
}

export var e = 1;

export default function(x) {
    return Math.exp(x);
  }

父模块circle.mjs有area函数,e属性,默认输出。

// circleplus.mjs

import * as circle from './circle.mjs';

export var e = 2.71828182846;

export default function(x) {
    console.log('我是子类default')
    console.log('x:'+x)
  return Math.exp(x);
}

export function area(radius) {
    console.log('我是子类area()')
    
    return Math.PI * radius * radius;
  }

子模块circleplus.mjs 引入了父模块circle.mjs。并且有自己的area函数,e属性,默认输出。

使用时,按照继承的含义,应该只需要引入子模块。

//main.mjs

import * as aaa from './circleplus.mjs';
import exp from './circleplus.mjs';

console.log(exp(aaa.e));
aaa.area(1)

可以正常使用,但是其实这里没有继承,只是调用链而已,main.mjs中引入circleplus.mjs,当然可以使用circleplus.mjs中的东西。而circleplus.mjs又引入了circle.mjs,自然也可以使用circle.mjs中的东西。

如果是子模块继承父模块,那么子模块应该自动就有父模块的属性和函数。

让我们看看这个例子

// circle.mjs

  export function A() {
    console.log('我是父模块A()')
}
// circleplus.mjs 

import { A } from './circle.mjs';
//main.mjs

import * as aaa from './circleplus.mjs'; 

 aaa.A()

上述代码中父模块circle.mjs输出A函数,子模块circleplus.mjs引入了父模块。main.js中引入了子模块,却访问不了A函数。

怎样才能访问到呢?

改一下子模块就可以,让子模块也输出父模块。但这样做不就又变成调用链了么,没有继承啊!

// circleplus.mjs 

export { A } from './circle.mjs';

子模块也不能覆盖父模块同名属性或者函数。下面代码是没法使用的,会提示“Identifier 'A' has already been declared”

// circleplus.mjs 

import {A} from './circle.mjs';

export function A() {
    console.log('我是子模块A()')
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值