Skip to Content

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.

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply