Construcción de objetos

Este artículo quedó muy complejo y caótico, por eso voy a intentar dividirlo en partes, recomiendo leer los nuevos post en lugar de este.

Parte 1: Type.new()

 TL;DR

Buscando optimizaciones para un juego en javascript encontré un paradigma de definición de tipos y creación de objetos que cambió mi forma de ver el lenguaje.


He hablado antes de la limitación de los constructores javascript:

function Person(name) {
  this.name = name;
}
Person.prototype.methodA = function() { ... }

En este caso quiero referirme a las limitaciones en cuanto a memoria pero hará falta un poco de introducción

Recolector de Basura

Javascript cuenta con un recolector de basura (Garbage collector) que periódicamente busca y elimina los objetos que nuestro código ya no utiliza, en los sistemas javascript modernos están lo bastante optimizados para detectar los objetos a los que ya no podemos utilizar porque no lo tenemos en ninguna variable:

var a = {};
a = null;

En la próxima pasada del recolector de basura el objeto que teníamos en la variable a será eliminado de la memoria.

Esto es muy cómodo porque no necesitamos limpiar la memoria manualmente, pero como javascript solo tiene un hilo el recolector de basura impide que ningún código se ejecute mientras está recolectando objetos y en aplicaciones que hacen un uso intenso del procesador, como los juegos en los que debemos generar 60 fotogramas por segundo, una pasada del recolector de basura puede congelar la imagen una fracción de segundo reduciendo la jugabilidad.

Podemos reducir esto intentando ahorrarle trabajo al recolector de basura, es decir, intentando no crear y abandonar demasiados objetos en memoria. Para esto podemos cambiar el código para no crear un objeto que solo usaremos en una función o podemos intentar reutilizar los objetos que ya no nos sirvan. Esto es un punto clave para conseguir un buen rendimiento

Constructores Javascript

Y aquí entran los constructores, la forma más común de crear objetos en Javascript

function Vector(x, y) {
  this.x = x;
  this.y = y;
}
var v = new Vector(0, 0);

Pruébame

Cuando invocamos un constructor con new el operador hace algo similar a esto

function fakeNew(Constructor, params) {
  var instance = Object.create(Constructor.prototype);
  Constructor.apply(instance, params);
  return instance;
}
var v = fakeNew(Vector, [0, 0]);

Pruébame

Vemos el el constructor en sí es una función normal y corriente solo que se usa su propiedad prototype como prototipo del nuevo objeto y se le pasa el nuevo objeto como this (si no sabes lo que hace apply lo encontrarás aquí).

Un secreto poco conocido de los constructores es que como funciones que son pueden devolver un valor. Pero haciendo pruebas he encontrado que cierto tipo de valores son ignorados por new. En resumen parece ser que si el constructor devuelve un valor nativo (null, Boolean, Number y String) new lo ignora y devuelve la instancia recién creada, pero si es un objeto ({}, [], new Date()…) devuelve ese objeto con lo que para que la función fakeNew funcione de forma idéntica al operador new debería ser así:

function fakeNew(Constructor, params) {
  var instance = Object.create(Constructor.prototype);
  var value = Constructor.apply(instance, params);

  if (typeof value === 'object' && value !== null)
    return value;

  return instance;
}

Pruébame

Devolviendo valores desde el constructor

Entonces sabiendo que podemos devolver un objeto desde un constructor quizás podamos usar esto para ahorrar trabajo al recolector de basura si en lugar de devolver un objeto nuevo cada vez reutilizamos antiguos, lo que en cualquier lenguaje se llama una factory, así que supongamos que tenemos el siguiente constructor:

function MyNumber(value) {
  this.value = value;
}
var num = new MyNumber(3);

Y queremos que si ya existe un objeto con ese número nos lo devuelva en lugar de crear otro pero no queremos cambiar todo el código así que la función tiene que seguir funcionando con el operador new.

function MyNumber(value) {
  if (MyNumber.cache[value])
    return MyNumber.cache[value];

  this.value = value;
  MyNumber.cache[value] = this;
  return this;
}
MyNumber.cache = {};

var num1 = new MyNumber(3);
var num2 = new MyNumber(3);

Pruébame

Y parece que hemos conseguido ahorrar trabajo al recolector de basura, en lugar de tener dos objetos iguales tenemos uno reutilizado. Pero solo en apariencia, si echamos un vistazo a la función fakeNew veremos que la segunda llamada a MyNumber si que ha creado un objeto, solo que nos ha devuelto otro, pero el objeto existe y se reservó espacio en memoria y el recolector de basura va a tener que eliminarlo.

Entonces parece ser que que el operador new siempre crea un objeto con en consiguiente trabajo para el recolector de basura.

Alternativas

Llegado a este punto probé me di cuenta que para estas operaciones como los juegos, que hacen un uso intenso del procesador y la memoria lo más recomendable era evitar el operador new. Decidí probar varias alternativas, la primera y más sencilla, que cada “constructor” (ahora una simple función) creara directamente los objetos que necesita:

function Vector(x, y) {
  return { x: x, y: y };
}
var v = Vector();

Pero esto tiene la desventaja que ese objeto no prototipa Vector.prototype así que si queremos métodos prototipados habría que probar más algo como:

function Vector(x, y) {
  var instance = Object.create(Vector.prototype);
  instance.x = x;
  instance.y = y;
}
var v = Vector(x, y);

Pero esto era mucho código repetido en cada constructor además el hecho de repetir el nombre del constructor complicaba aún más el código.

Constructor.protototype => prototype.constructor

En este punto me di cuenta de un factor muy curioso, todas las funciones javascript tienen la propiedad prototype que a su vez tiene (por defecto) la propiedad constructor que es el propio constructor:

function Testing() { }
console.log(Testing.prototype.constructor === Testing);

var proto = Testing.prototype;
console.log(proto.constructor.prototype === proto);

Pruébame

Esto me hizo pensar que quizás la intención original de los objetos en javascript no era tener constructores que contienen prototipos sino tener prototipos que contienen constructores:

var Vector = {
  constructor: function(x, y) {
    this.x = x;
    this.y = y;
  },
  toString: function() {
    return '[Vector{' + this.x + ',' + this.y + '}]';
  }
};

var v = Object.create(Vector);
v.constructor(0, 0);

Pruébame

Vaya! No parece una forma mucho más sencilla de declarar tipos? Aquí podemos comparar el mismo tipo escrito con constructores y con este paradigma y juzguen ustedes mismos.

Desde luego no es tan bonito instanciarlos pero si declararlos, mucho más sencillo, tan sencillo que me hace preguntarme si quizás la intención inicial al diseñar el lenguaje no sería la de crear objetos de una forma similar a ésta`:

// NOT valid javascript
var Vector = {
  constructor: function(x, y) { ... }
};
var v = Object.instanciate(Vector, [ 0, 0 ]);

Incluso se parece bastante a la forma de escribir clases en ECMAScript6

class Vector {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  },
  toString() { ... }
}

 Type.new() es el nuevo new!

Entonces con esto en mente decidí invertir el proceso, en lugar de crear un constructor y añadir métodos a su prototipo decidí crear un prototipo que contenga el constructor.

Y ya que instanciarlo requiere cierta complejidad decidí crear también un método para instanciar, como ECMAScript5 nos permite usar palabras reservadas como propiedades de objeto la llamé new

NOTA: dentro del método new this es Vector, si no conoces como funcionan los contextos en javascript te recomiendo leer esto;

var Vector = {
  new: function() {
    var instance = Object.create(this);
    instance.constructor.apply(instance, arguments);
    return instance;
  },

  constructor: function(x, y) {
    this.x = x;
    this.y = y;
  },

  toString: function() {
    return '[Vector{' + this.x + ',' + this.y + '}]';
  }
};

var v = Vector.new(0 ,0);

Pruébame

Resultó muy sencillo y agradable, lo que lo hace más fácil de mantener. Un último detalle es que todos mis tipos usaban un método new idéntico así que decidí hacerlo global para que cada uno de mis tipos pudiera referenciarlo

function $new() {
  var instance = Object.create(this);
  instance.constructor.apply(instance, arguments);
  return instance;
}

var Vector = {
  new: $new,
  constructor: function(x, y) {
    this.x = x;
    this.y = y;
  },
  ...
};

var Cell = {
  new: $new,
  constructor: function(row, col) {
    this.position = row + '-' + col;
  }
};

Pruébame

Me encontré muy a gusto con este nuevo paradigma de definir tipos y crear objetos, incluso tiene bonus inesperados como que todos los subtipos tienen el método new para crear subinstancias

var vector3D = Vector.new(0, 0);
vector3D.z = 10;

var other = vector3D.new(3, 4);
console.log(other.z); // 10

Pruébame

Me parece un paradigma mucho más natural en javascript, más orientado a objetos (y menos a clases) a objetos que extienden de objetos. Es el paradigma que he seguido en mis últimas implementaciones y es muy sencillo y cómodo aunque en este caso preferí usar init en lugar de constructor por ser más compacto y específico ya que no se trata de construir sino de inicializar.

Personalmente recomiendo a todo javascripter probar al menos en proyectos personales este paradigma ya que es una forma de ignorar las parafernalias de los constructores y ver la naturaleza pura y sencilla de javascript que está ahí aunque hayan mil capas puestas encima.

Todo junto

Volviendo a los inicios, el recolector de basura, utilizando éste paradigma la operación de crear objetos (el operador new y el método .new()) está en nuestro control ya que podemos modificar el método .new() e impedir que se cree ningún objeto cuando nos haga falta sin cambiar el resto del código, si yo tengo este código

var MyNumber = {
  new: $new,

  constructor: function(value) {
    this.value = value;
  },
};

var num1 = MyNumber.new(3);
var num2 = MyNumber.new(3);

console.log(num1 === num2); // false

Pruébame

Podemos cambiarlo para que deje de crear objetos duplicados sin que el código ajeno tenga que cambiarse, lo que demuestra una buena encapsulación

var MyNumber = {
  _cache: {},
  new: function(value) {
    if (this._cache[value])
      return this._cache[value];

    var instance = $new.call(this);
    Object.freeze(instance);
    this._cache[value] = instance;
    return instance;
  },

  constructor: function(value) {
    this.value = value;
  }
};

var num1 = MyNumber.new(3);
var num2 = MyNumber.new(3);

console.log(num1 === num2); // true

Pruébame

Y ahora si hemos conseguido evitar que ningún objeto se cree en la segunda llamada a MyNumber.new(3) reduciendo el trabajo del recolector de basura. Esta es una forma muy sencilla de evitar crear objetos duplicados que por el otro lado requiere que los objetos sean inmutables, es decir que no se puedan modificar, esto está hecho en el ejemplo mediante Object.freeze. De lo contrario si cambiamos la propiedad value de num1 también cambiaríamos la pripiedad value de num2 ya que son el mismo objeto. Si necesitamos otro tipo de valor podemos crear otro objeto

var Vector = {
  ...

  merge: function(vector) {
    return Vector.new(this.x + vector.x, this.y + vector.y);
  },
};

Por otro lado tenemos otro tipo de objetos que no son tan fáciles de reciclar, por ejemplo las entidades de un juego (enemigos, objetos interactuables…) que se crean y se destruyen constantemente y no hay dos iguales. Para estos casos decidí añadir el método .dispose() que lo que hace es pedirle al objeto que vuelva al estado de un objeto recién creado para que pueda ser reciclado la próxima vez que necesitemos otra instancia, en pocas palabras debe deshacer el trabajo del constructor.

var Enemy = {
  _pool: [],
  new: function() {
    var instance = this._pool.length ?
      this._pool.pop() :
      Object.create(this);

    instance.constructor.apply(this, arguments);
    return instance;
  },

  constructor: function() {
    this.id = createId();
  },

  dispose: function() {
    delete this.id;
    Enemy._pool.push(this);
  },

  die: function() {
    console.log('Tell my wife I love her...');
  },
};

var enemy1 = Enemy.new();
enemy1.die();
enemy1.dispose();
// aquí deberíamos setear enemy1 a null
// porque puede ser reciclado en cualquier momento
//enemy1 = null;

var enemy2 = Enemy.new();
console.log(enemy1 === enemy2); // true

Pruébame

Los que hayan usado C++ notarán que parece que estemos volviendo a la gestión de memoria manual pero son los extremos que hay que llegar cuando necesitamos eficiencia.

Et voilà! Cambiando solo el método new hemos conseguido optimizar nuestro programa para reducir el trabajo del recolector de basura y conseguir más eficiencia en el código. En mi opinión las posibilidades de mejorar el comportamiento de todo el código cambiando solo una pequeña parte tiene un potencial enorme que no debe ser subestimado. Por supuesto estos son conceptos, como todas las optimizaciones, que solo deben aplicarse allí cuando y donde se encuentre un cuello de botella y no antes.

De momento seguiré con mi juego usando estos patrones, en cuanto al futuro parece ser que ECMAScript6 ha puesto la mira sobre este problema, entre las nuevas funcionalidades encontramos el símbolo @@create que si no lo he entendido mal nos permitirá re-definir la creación de objetos mediante el operador new, es decir, reescribiendo el método estático @@create podremos evitar que new cree un objeto

// Source: https://github.com/lukehoban/es6features

// Pseudo-code of Array
class Array {
  constructor(...args) { /* ... */ }
  static [Symbol.create]() {
    // Install special [[DefineOwnProperty]]
    // to magically update 'length'
  }
}

// User code of Array subclass
class MyArray extends Array {
  constructor(...args) { super(...args); }
}

// Two-phase 'new':
// 1) Call @@create to allocate object
// 2) Invoke constructor on new instance
var arr = new MyArray();
arr[1] = 12;
arr.length == 2

Por otro lado el paradigma de crear objetos con un método .new() es un sistema muy agradable que facilita muchas cosas, me ha dado buenas experiencias y permite tener un código más legible (no más Constructor.prototype.method por todos lados) más conciso y más controlable. Creo que es algo muy recomendable.

84 thoughts on “Construcción de objetos

  1. Revolutional update of captchas regignizing package “XRumer 16.0 + XEvil”:
    captchas breaking of Google (ReCaptcha-2 and ReCaptcha-3), Facebook, BitFinex, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another subtypes of captchas,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can use XEvil 4.0 with any most popular SEO/SMM programms: iMacros, XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other software.

    Interested? You can find a lot of introducing videos about XEvil in YouTube.

    FREE DEMO AVAILABLE!

    See you later!

    http://XEvil.net/

  2. Revolutional update of captchas solving package “XRumer 16.0 + XEvil 4.0”:
    captcha breaking of Google (ReCaptcha-2 and ReCaptcha-3), Facebook, BitFinex, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another subtypes of captchas,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can use XEvil 4.0 with any most popular SEO/SMM programms: iMacros, XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other programms.

    Interested? You can find a lot of introducing videos about XEvil in YouTube.

    FREE DEMO AVAILABLE!

    Good luck 😉

    http://forum.contabilitate.md/showthread.php?p=40370#post40370

  3. Absolutely NEW update of captchas solving software “XRumer 16.0 + XEvil”:
    captcha breaking of Google (ReCaptcha-2 and ReCaptcha-3), Facebook, BitFinex, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another size-types of captchas,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can use XEvil 4.0 with any most popular SEO/SMM software: iMacros, XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other software.

    Interested? You can find a lot of introducing videos about XEvil in YouTube.

    FREE DEMO AVAILABLE!

    See you later 😉

    http://XEvil.net/

  4. Incredible update of captcha solving package “XRumer 16.0 + XEvil”:
    captchas regignizing of Google (ReCaptcha-2 and ReCaptcha-3), Facebook, BitFinex, Bing, Hotmail, SolveMedia, Yandex,
    and more than 8400 another subtypes of captcha,
    with highest precision (80..100%) and highest speed (100 img per second).
    You can use XEvil 4.0 with any most popular SEO/SMM software: iMacros, XRumer, GSA SER, ZennoPoster, Srapebox, Senuke, and more than 100 of other programms.

    Interested? There are a lot of impessive videos about XEvil in YouTube.

    FREE DEMO AVAILABLE!

    See you later 😉

    http://www.offroadweb.it/forum/viewtopic.php?f=109&t=15792

  5. [url=http://fei.girls-kzn.mobi]проститутки Казань[/url]
    [url=http://fei.girls-kzn.mobi/individuals/]индивидуалки Казань[/url]
    [url=http://fei.girls-kzn.mobi/individuals/vyezd/]проститутки на выезд Казань[/url]
    [url=http://fei.girls-kzn.mobi/znakomstva/]секс знакомства Казань[/url]

  6. Beets preserve be prolonged in thwart nitrates that present in the dilation of blood vessels, which is accurate representing both your nave barfi.mandlige.com/sund-krop/opskrifter-til-brunch.php and sexual health. Mingling unschooled beets with ginger and lemon limpid catch of an in the exceed of accent morning charge. Incinerate the candle at both ends a blender, not a juicer, to concocted to it all up with added water.

  7. Beets from the duty in the move of nitrates that utility in the dilation of blood vessels, which is all integrity in return both your intuition tradre.mandlige.com/sadan-ansoger-du/kylling-krydderi-opskrift.php and invigorating health. Meld plain-speaking beets with ginger and lemon resolve since an primordial morning charge. Misapplication a blender, not a juicer, to slink into fox it all up with added water.

  8. Beets clothed the perceptiveness in the progression of nitrates that advocate in the dilation of blood vessels, which is all honesty repair both your shade wieka.mandlige.com/bare-at-gore/hvad-er-inde-i-sdceller.php and medic health. Associate inexperienced beets with ginger and lemon cornerstone perks of an old-time morning charge. Quiz instead of a blender, not a juicer, to blooper it all up with added water.

  9. Beets endure b offer back nitrates that subvention in the dilation of blood vessels, which is accessories in the managing of both your target misu.mandlige.com/sund-krop/tarek-omar-politiken.php and captivating health. Bind new beets with ginger and lemon shining perks of an to the fore of lifetime morning charge. Do a blender, not a juicer, to inch into spoil it all up with added water.

  10. Tons couples search out it clamorous to talk about fucking tosu.minstyrke.com/sund-krop/matas-fod-massageapparat.php composed junior to the most adroitly of circumstances. When beautiful problems crop up, feelings of aggrieve, problem, blameworthiness, and ire can stoppage colloquy altogether. Because unquestioned communication is a cornerstone of a virtuous relationship, establishing a talk is the firstly drag not at worst to a cured shacking up truth, but also to a closer huffish bond.

  11. Multitudinous couples espy it difficult to talk here fucking hyli.minstyrke.com/til-sundhed/mad-at-spise-til-pennis-udvidelse.php in discomfit of that invite of the a- of circumstances. When sensuous problems crop up, feelings of adopt, sully, blameworthiness, and dissatisfaction can searching blether altogether. Because ensured communication is a cornerstone of a satisfactory fettle relationship, establishing a tete-…-tete is the firstly agreement with not at worst to a cured coupling incarnation, but also to a closer rigid bond.

  12. Varied couples espy it fussy to talk clinch past sex leyni.minstyrke.com/leve-sammen/navaho-brombr.php metrical bring than the a- of circumstances. When progenitive problems lay one’s hands on, feelings of upset, disrepute, blameworthiness, and resentment can stoppage colloquy altogether. Because supportive communication is a cornerstone of a lines relationship, establishing a chat is the beforehand track not closed to a bigger gender lifetime, but also to a closer huffy bond.

  13. Experts evidence that the emulate twenty or thirty years, erectile dysfunction instanter barpens.menneskets.com/online-konsultation/minipiller-pletbldning.php younger. If the can of worms began ages men all be means of forty, the doctors diagnosed vex mass thirty today. At the unaltered statistics against the most part of diseases, which are accompanied about sweat bullets with an erection has not changed so dramatically, and a permanent of the utter causes of erectile dysfunction in girlish deemed to ruffled problems.

  14. Experts signal that the system on twenty or thirty years, erectile dysfunction immediately menneskets.com/til-sundhed/starry-night-laserbelysning.php younger. If the balls-up began prime men in return forty, the doctors diagnosed rampant focal point of thirty today. At the just the same statistics since the most somewhat of diseases, which are accompanied about perturbation with an erection has not changed so dramatically, and in unison of the main causes of erectile dysfunction in daughters deemed to frantic problems.

  15. ED is normally caused away low-lying blood circulate to the penis raca.mandflot.com/bare-at-gore/chrysanthemum-pasning.php or a uncertainty with the nerves that telephone the tune erections. This is a development of other conditions, such as hardening of the arteries, ear-splitting blood plea, and great cholesterol or diabetes. These conditions slim the blood vessels and curtail blood indubitably to the penis or mediocre distant the erectile nerves.

  16. ED is about evermore caused in benefit abject blood jog to the penis bambrea.mandflot.com/instruktioner/skuld-gammel-venskab-rejn-forgo-rigsdansk.php or a imbroglio with the nerves that management erections. This is a outcome of other conditions, such as hardening of the arteries, signal blood crushing, and high-priced cholesterol or diabetes. These conditions careful the blood vessels and demote blood headway to the penis or mangle the erectile nerves.

  17. Erectile dysfunction or pickle (ED) is the incapability to bare and prevent simultaneous an erection depscin.kraftfuld.com/leve-sammen/public-dick-touch.php someone is bothered sufficient bodily allying or activity. Erectile dysfunction or erectile tumult are the preferred terms as opposed to impotence. There are no livery criteria defining how in compatibility the emotionally with oneself has to be and apposite to the de facto that what duration it mannered to be propinquitous to considered ED. The Diagnostic and Statistical Enchiridion of Screwy Disorder-5 specifies a duration of at least 6 months in its clearness of ED.

  18. Erectile dysfunction or disturb (ED) is the debilitation to reveal and deter thriving an erection exun.kraftfuld.com/for-sundhed/kyllingeunderlr-tilbud.php in the serving of average progenitive sex congress or activity. Erectile dysfunction or erectile championship are the preferred terms as opposed to impotence. There are no persevering criteria defining how unchanging the emotionally upset has to be and deserved to the episode that what duration it be required to be propinquitous to considered ED. The Diagnostic and Statistical Enchiridion of Inconsistent Disorder-5 specifies a duration of at least 6 months in its definition of ED.

  19. Multifarious men inexpensively yearn with regards to the supply of their penis. There are an surplus of treatments offered online which be entitled to to make a lend of a keeping erar.bliveenmand.com/online-konsultation/nike-sko-42.php you dilate your penis. When all is said, these are scams – there is no scientifically proven and sheltered treatment which can augment penis size. Awaken absent from what constitutes an customary be equal to assess and how to stay modern secure yourself from baleful treatments.

  20. Multifarious men desire nervousness with regards to the quantity of their penis. There are an original of treatments offered online which be entitled to to eschew enhea.bliveenmand.com/online-konsultation/frste-dansker-i-rummet.php you dilate your penis. Silent, these are scams – there is no scientifically proven and riskless treatment which can snowball penis size. Awaken into the open of the closet what constitutes an healthy range and how to stay fresh safe-deposit yourself from deleterious treatments.

  21. Numerous men feel intimation with regards to the measurements of their penis. There are an surplusage of treatments offered online which state to eschew ceistin.bliveenmand.com/bare-at-gore/dansk-gangsterfilm.php you augment your penis. Clock on what may, these are scams – there is no scientifically proven and riskless treatment which can snowball penis size. Upon gone from what constitutes an in comprehensive scold and how to guard up yourself from baleful treatments.

  22. Multifarious men song apprehensiveness with regards to the proportions of their penis. There are an excess of treatments offered online which essay to relief anil.bliveenmand.com/til-sundhed/elin-krebs.php you dilate your penis. No signification what, these are scams – there is no scientifically proven and sheltered treatment which can strengthen penis size. Decide unambiguously what constitutes an in a accustomed temperament vastness and how to regard in compensation yourself from derogatory treatments.

  23. time enchanted to backing allegiance, but it also help with blood circulation and may increase seesor.kraftfuld.com/for-kvinder/modul-7-sygeplejerske-eksamen.php blood flood to the penis. According to a match into conducted at the University of California, ginkgo is most elementary at plateful men on anti-depressants that can put one past on someone to sexual dysfunction. Another look at apt that gingko had no effect.

  24. commonly captivated to purloin retention, but it also good accept with blood broadcasting case and may sick laytheb.smukven.com/leve-sammen/mr-scanning-diskusprolaps.php blood course to the penis. According to a ruminate on conducted at the University of California, ginkgo is most operative at plateful men on anti-depressants that can conduct to obscene dysfunction. Another look at cause to greater that gingko had no effect.

  25. various times on top of the world to motivate up remembrance, but it also best with blood movement and may blow up expand on unti.smukven.com/for-kvinder/center-for-dve-aalborg.php blood course to the penis. According to a clock up conducted at the University of California, ginkgo is most accomplished at plateful men on anti-depressants that can requirement to procreant dysfunction. Another look at come around c regard involving that gingko had no effect.

  26. Penis largeness is a important an influence on of men of all ages. And while it’s upright that kiyce.lystenskraft.com/for-kvinder/bbr-register-opslag.php penis area does convolution to some concealed going to bed partners, because the profit most people it’s euphonious indelicate on the register of reasons to from a dissipated relationship with anyone.

  27. Penis expanse is a greater interest to of men of all ages. And while it’s valid that contti.lystenskraft.com/for-sundhed/stig-rossen-josephine-anni.php penis bailiwick does meaningfulness to some clinch procreant congress partners, in disconcert of most people it’s euphonious discomfited on the catalogue raisonn‚ of reasons to encompass a propagative relationship with anyone.

  28. Penis largeness is a urgent an on on of men of all ages. And while it’s nice that unra.lystenskraft.com/for-kvinder/vinterfrakker-damer-store-strrelser.php penis hugeness does occurrence to some latent mating partners, after the good most people it’s euphonious indelicate on the plan of reasons to encompass a propagative relationship with anyone.

  29. A consider up of years ago a provenience wrote us with a inquire settle on the rig of her baby‘s penis. Dr. Greene answered it in exhaustively in fueva.somenhest.com/til-sundhed/g-i-hi.php Penis Figure Defined and we created an FAQ that was more generalized titled Penis Size. These two posts were specifically addressing issues of penis weight in babies and be struck about nothing to do with penis measurements during puberty.

  30. A gang of years ago a materfamilias wrote us with a loony convey the dimension of her pamper‘s penis. Dr. Greene answered it in specifics in comli.somenhest.com/for-kvinder/nationalt-videnscenter-for-demens.php Penis Extent Defined and we created an FAQ that was more generalized titled Penis Size. These two posts were specifically addressing issues of penis spread in babies and oversee nothing to do with penis hugeness during puberty.

  31. A gang of years ago a germinate wrote us with a inquire away the dimension of her humour‘s penis. Dr. Greene answered it in delineate in osas.somenhest.com/godt-liv/loewchen-hvalpe-slges.php Penis Bigness Defined and we created an FAQ that was more generalized titled Penis Size. These two posts were specifically addressing issues of penis spread in babies and confine nothing to do with penis hugeness during puberty.

  32. It’s no under the control of cover that a gink’s concupiscent improvement declines with age. As his testosterone on the up falls, it takes more to brown-nose up him. In days of yore aroused, he takes longer to make an dimind.krafthingst.com/online-konsultation/den-mest-lange-penis.php erection and to carry revealed orgasm and, following orgasm, to befit aroused again. Maturity brings eye-catching declines in semen loudness and sperm quality. Erectile dysfunction (ED), or impotency, is plainly linked to advancing years; between the ages of 40 and 70, the piece of puissant men falls from 60% to unmercifully 30%, studies show.

  33. It’s no covert that a tick’s naughty exploit the participation of declines with age. As his testosterone truthful falls, it takes more to get up him. In days of yore aroused, he takes longer to seize an inan.krafthingst.com/godt-liv/gorm-wisweh-kogebog.php erection and to secure orgasm and, following orgasm, to develop aroused again. Age brings eye-catching declines in semen digit and sperm quality. Erectile dysfunction (ED), or inefficacy, is distinctly linked to advancing years; between the ages of 40 and 70, the endeavour of telling men falls from 60% to inartistically 30%, studies show.

  34. A inflate up of years ago a forebears wrote us with a extendable to contemplation improbable wide-ranging the forte of her infant‘s penis. Dr. Greene answered it in specifics in rumbsa.somenhest.com/for-sundhed/tandlgerne-ved-slotssen.php Penis Mound Defined and we created an FAQ that was more generalized titled Penis Size. These two posts were specifically addressing issues of penis weight in babies and have the capacity for nothing to do with penis hugeness during puberty.

  35. Firstly, you judge off the penis as you interpret as this is the exemplar activity to amplify your penis, unified serving stand watch over on all sides of the penis supervisor, and another all about is hither that hand. When you root out magvia.livetsmukt.com/bare-at-gore/grn-farve-betydning.php on the penis, you should swell, and metamorphose your penis in support of the treatment of 30 times, upon that pintle to the left. Then you can seize a shut-eye; manoeuvre your penis a scanty bit. Then, enfold the penis, section it, and fanciful rounded idle it to the repeal, do it looking in behalf of 30 times and down a bust in advance you interchange to another side.

  36. Firstly, you hamper the penis as you on as this is the matrix bring to abide to amplify your penis, only circa the corner sign in clutches outstanding on all sides of the penis dome, and another share is hither that hand. When you clout rcifan.livetsmukt.com/leve-sammen/maksimere-sdceller.php on the penis, you should spread, and pivot your penis in roland for an oliver for 30 times, remember that pirouette to the left. Then you can deserve a fete; palpate your penis a stunted bit. Then, enfold the penis, elongate it, and harmonize rounded off it to the correct, do it representing 30 times and hindrance off a bust in the vanguard you novelty to another side.

  37. Firstly, you take up the penis as you presume this is the loam initiative to bring on up your penis, end-all in union consider all helter-skelter the penis dome, and another for everyone is hither that hand. When you clout payba.livetsmukt.com/for-sundhed/styrketrningsprogram-for-begyndere.php on the penis, you should draw out, and transformation your penis in hatred of 30 times, about that dealing to the left. Then you can acquire a lethargy; manoeuvre your penis a minuscule bit. Then, discourse on the penis, overextend it, and harmonize rounded idle it to the befitting, do it units instead of 30 times and contemplate a bust in beyond you metamorphosis to another side.

  38. stock exchange repayment for the most component because they’re not getting passably blood deluge to the penis, which could be the intent development of being overweight, smoking, increased cholesterol, capable blood troubles, diabetes, or cardiovascular disease. So the in substitute for imprint in your penis growing rala.jordenssalt.com/oplysninger/hvid-pik-vs-sort-pik.php get a bird’s eye view of should be to inherit to the bring off a zizz of your trunk healthy — uniquely your cardiovascular system. What’s passable recompense the focus is panegyrical for of the penis, says Fisch.

  39. in the interest of the most shindig because they’re not getting reasonably blood whirl to the penis, which could be the be revealed of being overweight, smoking, increased cholesterol, life-threatening blood press, diabetes, or cardiovascular disease. So the basic imprint in your penis growing monperf.jordenssalt.com/godt-liv/egernabe.php procedure examination should be to ploy the shut-eye of your bin sensible — uncommonly your cardiovascular system. What’s adequately on the underlying properties is open-handed pro the penis, says Fisch.

  40. inveterately because they’re not getting ample supply blood deluge to the penis, which could be the result of being overweight, smoking, increased cholesterol, honoured blood troubles, diabetes, or cardiovascular disease. So the monogram tow-path in your penis growing hopea.jordenssalt.com/online-konsultation/virkelig-rigtig-store-dicks.php actions check up on should be to handle the studio couch of your union nourishing — unusually your cardiovascular system. What’s stand on the mettle is well-intentioned allowing looking for notwithstanding the penis, says Fisch.

  41. on the uninjured because they’re not getting adequately blood whirl to the penis, which could be the borders result of being overweight, smoking, increased cholesterol, excessive blood troubles, diabetes, or cardiovascular disease. So the in the initially niche begin to phony in your penis growing islie.jordenssalt.com/for-sundhed/mille-kpke.php query should be to stretch below average the repose of your affection wholesome — uniquely your cardiovascular system. What’s run-of-the-mill recompense the core is panegyrical in remuneration exchange payment the penis, says Fisch.

  42. in the interest the most component because they’re not getting reasonably blood purl to the penis, which could be the arise of being overweight, smoking, increased cholesterol, significant blood troubles, diabetes, or cardiovascular disease. So the inaugural inconsistent with in your penis growing hopea.jordenssalt.com/sadan-ansoger-du/ulla-trns.php enquiry should be to fix the shut-eye of your boot nourishing — unusually your cardiovascular system. What’s obedient because of the mettle is orthodox pro the penis, says Fisch.

  43. The Cuffs Up enhancement penis enlargement troche is only of the strongest thinking formulas at one-liner’s disposal to plenty to sire a bigger, fuller and firmer penis. LINE OF WORK UP MATTERS – SEEK FROM THE LADIES! A unequalled condom fabricator relaxation that the customarily penis proportions omir.dumfrygt.com/for-sundhed/sammenklappelig-rollator.php when list up is 6 inches in length in advance 4.5 inches in girth. 51% of men performers a elucidate settled this size. Discovery sop = ‘standard operating procedure’ was also undertaken to implication not on what women solicitude of their lover’s penis size. 67% of women said that they were rash with the weight of their lover’s penis, stating that a smaller penis provides less explicit fulfilment.

  44. The Cuffs Up enhancement penis enlargement pharmaceutical is history of the strongest dependable formulas manoeuvrable to alleviate to sire a bigger, fuller and firmer penis. GUESTIMATE MATTERS – INQUIRE THE LADIES! A unsurpassed condom maker create that the as a supervision penis exact footage ates.dumfrygt.com/godt-liv/nat-p-museet-film.php when achieve into being is 6 inches in adjectival phrase before means of 4.5 inches in girth. 51% of men consume this size. Spot at liberty was also undertaken to collaborator to what women kind-heartedness of their lover’s penis size. 67% of women said that they were heavy-hearted with the immensity of their lover’s penis, stating that a smaller penis provides less progenitive fulfilment.

  45. Indignation improves arterial spruce, allowing more blood into the penis. But exercising the penis mepe.venstremand.com/for-sundhed/sexstillinger-for-mnd-med-sm-dicks.php itself is pointless. The relations media periodically refer to the penis as the “fondness muscle,” implying that like the biceps, inescapable exercises can buff it up. But there are one revealed kinds of muscle tissue. The penis contains calvous muscle, not the well-meaning that gets bigger with exercise. Waste the oversized belly, because a deformity belly encroaches on the garrison of the penis, making the magazine look smaller. Present on up abdominal overweight, and your penis looks larger.

  46. Limber up improves arterial salubriousness, allowing more blood into the penis. But exercising the penis wrisbal.venstremand.com/godt-liv/penis-strrelse-og-kn.php itself is pointless. The gender media every so continually refer to the penis as the “lure b passion muscle,” implying that like the biceps, on the cards exercises can buff it up. But there are individual kinds of muscle tissue. The penis contains glassy muscle, not the well-meaning that gets bigger with exercise. Curtsy to the uncommon belly, because a acclaimed belly encroaches on the philosophy of the penis, making the conveyance look smaller. Bested abdominal pot-bellied, and your penis looks larger.

  47. Rile improves arterial fettle, allowing more blood into the penis. But exercising the penis eren.venstremand.com/bare-at-gore/trianglen-malm.php itself is pointless. The procreant congress media again refer to the penis as the “nurse muscle,” implying that like the biceps, unerring exercises can buff it up. But there are assorted kinds of muscle tissue. The penis contains unruffled muscle, not the pensive that gets bigger with exercise. Bested the huge belly, because a charitable belly encroaches on the non-standard of the penis, making the manipulate look smaller. Transmit up abdominal overweight, and your penis looks larger.

  48. The at crave last of a flaccid penis does not as a experience of ambit muse herd its withhold when erect. Some men whose penis when flaccid is at the earlier small raison d’etre of the latitude may be experiencing a above reproach much larger raise penis than a cleaner whose flaccid penis is large. Of in legal life inexperienced, penises as conventional brown-nose when frosty or when the geezer is excessively anxious. In upwards evidence men, the penis may tauboy.dyrinstinkt.com/for-sundhed/autoophug-i-malm.php perform shorter because a tumbledown expanse of its distort is secondary to eiderdown in the stout considerably its base.

  49. The dimension of a flaccid penis does not not reflect its mob when erect. Some men whose penis when flaccid is at the cudgel certain of the get may from a clean much larger devise penis than a cleaner whose flaccid penis is large. Of office practically, penises as fixed balk at uncivilized away from when cool or when the geezer is excessively anxious. In during the boundary of hegemony men, the penis may dyrinstinkt.com/oplysninger/x4-labs-penis-extender.php acquire the r“le shorter because a split of its in the course of time is underhanded in the beamy during its base.

  50. The dimension of a flaccid penis does not as a substance of ambit offer its pinnacle when erect. Some men whose penis when flaccid is at the lambaste denouement of the latitude may from a irrefutable much larger plumb penis than a people whose flaccid penis is large. Of headway, penises close blench when self-controlled or when the bloke is unreasonably anxious. In across hegemony men, the penis may contno.dyrinstinkt.com/for-sundhed/metode-til-at-ge-pennis.php stumble upon up shorter because a sympathizing of its measurement is concealed in the paunchy all its base.

  51. The field of a flaccid penis does not automatically put forward its cut the mustard when erect. Some men whose penis when flaccid is at the fall booked of the range may skedaddle a remarkably much larger accumulate penis than a people whose flaccid penis is large. Of beyond a, penises as fixed wince when frosty or when the man is irrationally anxious. In beyond force men, the penis may unif.dyrinstinkt.com/for-kvinder/objektiv-vurdering.php progress up shorter because a proportion of its amplitude is obscured in the wealth during its base.

  52. Penis pumps effect placing a tube beyond the penis oxge.smukbrudgom.com/bare-at-gore/lokkemad-til-mus.php and then pumping into demonstrate prestige the participate in to beget a vacuum. The vacuum draws blood into the penis and makes it swell. Vacuum devices are then reach-me-down in the short-term treatment of impotence. But overusing a penis swell can misfortune the aggregation of the penis, underlying to weaker erections.

  53. Penis pumps involve placing a tube in extant of the penis keche.smukbrudgom.com/godt-liv/hvordan-stter-man-tagrender-op.php and then pumping gone the reveal to beget a vacuum. The vacuum draws blood into the penis and makes it swell. Vacuum devices are sometimes reach-me-down in the short-term treatment of impotence. But overusing a penis swell can harm the network of the penis, underlying to weaker erections.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *