How to implement the private property write class mode of of in JavaScript


We discussed how to write classes in JavaScript earlier. Private implementations are not discussed. Check this one out.

We know that the implementation of private properties in JS is essentially var + closure. The following

function Person(n, a){
    // public
    this.name = n;
    // private
    var age = a;
    this.getName = function(){
        return this.name;
    }
    this.getAge = function(){
        return age;
    }
}

As shown in the test, age is private and cannot be obtained with the point operator, but only with the getName method.

var p = new Person('jack',23);
console.log(p.age);  // undefined
console.log(p.getAge()); // 23

This is nothing fancy, but let’s do it using a utility function.  

function $class(className, classImp){
    function clazz(){
        if(typeof this.init == "function"){
            this.init.apply(this, arguments);
        }
    }
    classImp.call(clazz.prototype);
    window[className] = clazz;
}

Write a class

$class('Person', function(){
    //Private properties are defined here
    var age = '';
    this.init = function(n, a){
        //The Shared property is hung on this, initialized
        this.name = n;
        //Private property initialization
        age = a;
    };
    this.getName = function(){
        return this.name;
    };
    this.getAge = function(){
        return age;
    }
});

New is an instance object

var p = new Person('jack',23);
console.log(p.name); //Jack common can be obtained using the point operator
console.log(p.age); //Undefined private cannot be obtained by the point operator
console.log(p.getAge()); //Private age can only be obtained through a Shared method called getAge