Saya menggunakan ES6 untuk menulis kelas yang mewarisi Array dan mengatasi kaedah tolak Namun, selepas menukarnya kepada ES5 menggunakan Babel, saya mendapati kaedah yang dipanggil masih kaedah tolak asal:
.babelrc:
:
{
"presets": [
"es2015",
"react",
"stage-3"
],
"plugins": []
}
Kod ES6
sebelum penyusunan:
//类的定义
class ROUTE extends Array{
constructor(position){
super();
this.push({
position: (position || [0,0,0])
})
}
push(geometry){
...//业务相关代码
}
}
Kod disusun oleh 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;
}
Malah, apabila kaedah contoh kelas ROUTE dilaksanakan, kod logik perniagaan dalam kaedah _createClass tidak akan dipanggil sama sekali, tetapi hanya kaedah tolak Array akan dilaksanakan, melainkan kaedah tolak ditindih dalam pembina . versi babel:
"devDependencies": {
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-3": "^6.24.1"
}
Disebabkan oleh pengehadan enjin penyemak imbas, Babel tidak menyokong subkelas beberapa kelas terbina dalam, seperti Tarikh, Tatasusunan, Ralat..., jadi tentukan jenis yang diperlukan mengikut keperluan anda sendiri
Rujukan: https://babeljs.io/learn-es20...