javascript - Babel对于继承预定义类转换的问题
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-19 10:30:16
[JavaScript讨论组]

用ES6写了一个继承Array的类,覆写了push方法,但是用babel转换成ES5之后发现调用的方法还是原来的push方法:

.babelrc:

{
    "presets": [
      "es2015",
      "react",
      "stage-3"
    ],
    "plugins": []
}

编译前的ES6代码:

//类的定义
class ROUTE extends Array{

    constructor(position){
        super();
        this.push({
            position: (position || [0,0,0])
        })
    }

    push(geometry){
        ...//业务相关代码
    }
}

经过babel编译过后的ES5代码:

//先是几个工具方法
var _createClass=function...
var _get=function...
function _classCallCheck...
function _possibleConstructorReturn...
function _inherits...

//类的定义
var ROUTE = function (_Array) {
    _inherits(ROUTE, _Array);//继承
        function ROUTE(position) {
        ...//类的构造
        }
        _createClass(ROUTE, [{
            key: "push",
            value: function push(geometry) {
            //业务相关代码,实际上不会执行
        }]);
        return ROUTE;
}

实际上在执行ROUTE类实例的方法时,完全不会调用_createClass方法中的那段业务逻辑代码,而仅仅是执行Array的push方法,除非在构造方法中覆写push方法。

babel版本:

  "devDependencies": {
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-3": "^6.24.1"
  }
曾经蜡笔没有小新
曾经蜡笔没有小新

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号