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
jest wspólną prywatną funkcją konstruktorów i metod prototypowych. Korzystanie z niego może działać jak metoda i wykorzystywać this
.
Bardziej kompletną realizacją tej koncepcji są obiekty interfejsu i obiekty implementacji. Zamiast kilku losowych funkcji-jak-metod (podobnych do zlokalizowanych powyżej) faktycznie tworzysz całą klasę, która jest prywatna. Każde zewnętrzne stworzenie interfejsu powoduje powstanie dwóch obiektów: interfejsu powłoki publicznej i prywatnego obiektu implementacji. Pozwala to na ujawnienie interfejsu, który udostępnia publicznie inny, prawdopodobnie łatwiejszy w użyciu interfejs API. Lub pozwala na ponowne wykorzystanie pojedynczych prywatnych obiektów implementacji dla całych grup obiektów interfejsu.
Tak właściwie działa DOM (zwykle nie jest zaimplementowany w js). Obiekty interfejsu (na przykład obiekty elementów i węzłów) są specjalnie wymagane do zawijania podstawowej implementacji, która faktycznie wykonuje słowo. Wyeksponowane obiekty to niewiele więcej niż powłoki, które przekazują dostęp do właściwości i wywołanie metody.
Dom.js jest implementacją DOM w pełni zrealizowaną w js. Ciekawą techniką, z którą się zapoznałem podczas pracy było całkowicie automatyczne generowanie publicznych interfejsów. To jest cel IDL: publiczny interfejs API jest generowany automatycznie, pozostawiając tylko własną implementację. Oznacza to, że możliwe jest tworzenie takich rzeczy bez konsultacji z człowiekiem: https://github.com/Benvie/svgstuff/blob/master/lib/defs.js
+1 za link do ebooka na jedną stronę! dzięki.. – renatoargh