Ich habe ES6 verwendet, um eine Klasse zu schreiben, die Array erbt, und habe die Push-Methode überschrieben. Nach der Konvertierung in ES5 mit Babel habe ich jedoch festgestellt, dass die aufgerufene Methode immer noch die ursprüngliche Push-Methode ist:
.babelrc:
:
{
"presets": [
"es2015",
"react",
"stage-3"
],
"plugins": []
}
Der ES6
Code vor der Kompilierung:
//类的定义
class ROUTE extends Array{
constructor(position){
super();
this.push({
position: (position || [0,0,0])
})
}
push(geometry){
...//业务相关代码
}
}
Von babel zusammengestellter Code: 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;
}
Tatsächlich wird beim Ausführen der Methode der ROUTE-Klasseninstanz der Geschäftslogikcode in der _createClass-Methode überhaupt nicht aufgerufen, sondern nur die Push-Methode von Array ausgeführt, es sei denn, die Push-Methode wird im Konstruktor überschrieben . Babel-Version:
"devDependencies": {
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-3": "^6.24.1"
}
由于浏览器引擎的限制, Babel 不支持对某些内置类的subclass的支持,例如 Date, Array, Error..., 所以根据自己的需要自己定义所需要的类型吧
参考:https://babeljs.io/learn-es20...