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