I was playing a bit with Babel and ES6, transpiling some code and I was stucked at this part:
class App extends SomeParent {
myFunction() {
}
}
The output that I'm interested in, is this:
var _createClass = function() {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function(Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
My question is why they used this way/method for _createClass
var of using IIF and then returing another function instead doing something like this:
var _createClass = function (Constructor, protoProps, staticProps) {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
}
without having to use IIF and return another function...
Is there a good reason/practice?
Link for babel demo here
Babel's current output will only create the defineProperties
once wheras your example will recreate the function for ever single class declaration.