La forma de escribir clases en JavaScript se ha discutido anteriormente. Pero las implementaciones privadas no se discuten. Lea este artículo.
Sabemos que la esencia de la implementación de propiedades privadas en JS es var + cierre. como sigue
Copie el código de código de la siguiente manera:
función Persona(n, a){
// público
este.nombre = n;
// privado
var edad = a;
this.getName = función(){
devolver este.nombre;
}
this.getAge = función(){
edad de retorno;
}
}
La prueba es la siguiente. La edad es privada y no se puede obtener usando el operador de punto. En cambio, solo se puede usar el método getName.
Copie el código de código de la siguiente manera:
var p = nueva Persona('jack',23);
console.log(p.edad); // indefinido
console.log(p.getAge()); // 23
No hay nada sorprendente en lo anterior, usemos una función de herramienta para implementarlo a continuación.
Copie el código de código de la siguiente manera:
/**
* @param {String} nombre de clase
* @param {Función} classImp
*/
función $clase(nombreclase, imparclase){
funciónclazz(){
if(tipo de esto.init == "función"){
this.init.apply(esto, argumentos);
}
}
classImp.call(clazz.prototipo);
ventana[nombredeclase] = clazz;
}
escribir una clase
Copie el código de código de la siguiente manera:
$clase('Persona', función(){
// Las propiedades privadas se definen aquí
var edad = '';
this.init = función(n, a){
//Las propiedades compartidas se cuelgan de esto y se inicializan.
este.nombre = n;
// Inicialización de propiedad privada
edad = a;
};
this.getName = función(){
devolver este.nombre;
};
this.getAge = función(){
edad de retorno;
}
});
nuevo objeto de instancia
Copie el código de código de la siguiente manera:
var p = nueva Persona('jack',23);
console.log(p.name); // Común para jack, puedes usar el operador de punto para obtenerlo
console.log(p.age); // el privado indefinido no se puede obtener mediante el operador punto
console.log(p.getAge()); // 23 La edad privada solo se puede obtener a través del método público getAge