UI5 measure api design concerns
When I go throw jquery.sap.global.js, there is PerfMeasurement class implementation. I am afraid there are two concerns in my mind.
Firstly there are two different patterns to implement a class, one is prototype pattern, such as Version:
function Version() {}
Version.prototype.InRange() {}
The another pattern is constructor. Such as PerfMeasurement.
function PerfMeasurement() {
this._start = function() {};
this.start = this['_start'];
}
According to _start function name, it should be a private function. But we could access this private function.
> jQuery.sap.measure._start
> function (sId, sInfo, aCategories) {
if (!bActive) {
return;
}
aCategories = checkCategories(aCategories);
if (!aCategories) {
return;
}
var iTime = jQuery.sap.now(…
Since private and public functions are defined in the same function scope, then private function could get function instance reference this, and public functions could access private functions. For example:
var JsClass = function(name) {
var that = this;
this.name = name;
function _sayHello() {
console.log('hello:', that.name);
}
this.say = function() {
_sayHello();
};
}
var instanceOfJsClass = new JsClass('Mike');
console.log('name:', instanceOfJsClass.name);
instanceOfJsClass.say(); // Access public function
instanceofJsClass._sayHello(); // Can't access private function
In the same way, _start could be removed bind from function instance reference this. And then _start function become a real private function, and the same time it could be accessed by other public functions.