var Treasure = function(){
function locate(){
return this.x * this.y + 31337;
}
function Treasure(x, y){
this.x = x;
this.y = y;
}
Treasure.prototype.find = function find(){
return locate.call(this);
};
return Treasure;
}();
locate
es una función privada compartida para los métodos de constructor y prototipo. Usando call
puede actuar como un método y utilizar this
.
Una implementación más completa de este concepto es la de objetos de interfaz y objetos de implementación. En lugar de tener algunas funciones al azar como métodos (similar a localizar arriba) realmente creas una clase entera que es privada. Cada creación externa de la interfaz da como resultado dos objetos embalados: la interfaz de shell público y el objeto de implementación privado. Esto le permite exponer públicamente una interfaz que proporciona una API diferente, quizás más fácil de usar. O puede permitirle reutilizar objetos de implementación privados individuales para grupos enteros de objetos de interfaz.
Así es como se especifica el DOM para funcionar (generalmente no implementado en js). Los objetos de interfaz (elementos y objetos de nodo, por ejemplo) son específicamente necesarios para ajustar la implementación subyacente que realmente hace la palabra. Los objetos expuestos son poco más que conchas que reenvían el acceso a propiedades y la invocación de métodos.
Dom.js es una implementación completa de DOM hecha en js. Una técnica interesante que conocí mientras trabajaba en ella fue la generación completamente automatizada de interfaces públicas. Este es el propósito de IDL: la API pública se genera literalmente de forma automática, dejando solo la implementación privada para que realmente se cree. Lo que realmente significa que es posible crear cosas como esta sin consultar a un humano: https://github.com/Benvie/svgstuff/blob/master/lib/defs.js
+1 para el enlace al ebook de aplicaciones de una sola página! Gracias.. – renatoargh