Conceptos Básicos Javascript: Herencia por prototipos

Llegó la hora de entrar el en tema que realmente confunde a los recién llegados a Javascript, principalmente para quienes vienen de lenguajes que implementan la orientación a objetos mediante clases, que son la gran mayoría.

Orientación a Objetos

Primero deberemos aclarar que significa Programación Orientada a Objetos (POO u OOP en ingés).

Según la Wikipedia, la descripción es:

es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento.

Como vemos un lenguaje orientado a objetos no necesariamente tiene que implementarse mediante clases, cualquier sistema que proporcione herencia, abstracción, polimorfismo y encapsulamiento es una implementación de orientación a objetos válida. Como ya dijimos, el sistema de clases es el más extendido, utilizado por C++, Java, C#, PHP, Python, ActionScript3, Perl, Objective-C, Ruby, etc… Javascript no tiene clases, utiliza el sistema de herencia por prototipos, veamos la diferencia:

En un lenguaje basado en clases tenemos dos tipos de conceptos, los objetos en sí, referencias que pueden ser almacenadas, modificadas y pasadas como argumentos. Y por otro lado las clases, objetos intangibles, no podemos guardarlos en variables ni pasar como argumento, no podemos manipularlos ni comprobar si existen excepto por reflexión, que consiste en herramientas del lenguaje para obtener objetos (tangibles, del tipo anterior) que representan a las clases a las que no podemos acceder. En un lenguaje de éste tipo las clases están una capa por encima de los objetos y definen la herencia, abstracción, encapsulamiento y polimorfismo de los objetos que se obtendrán a partir de ellas, tienen una función de plantillas para crear objetos definidas antes de ejecutarse el código del programa.

En un lenguaje orientado a prototipos no hay clases que definan la herencia, los objetos mismos heredan de otros objetos. No hay clases cuando el programa se inicia, sino que se crean objetos y se le ordena a otros objetos que hereden de ellos. Por ejemplo, si tenemos un objeto eventEmitter y queremos crear instancias creamos nuevos objetos y hacemos que hereden de eventEmitter.

[[Prototype]]

Una vez entendido el concepto podemos pasar a la práctica, sabemos que para crear instancias de clases hacemos new MyClass() pero cómo hacemos que objetos hereden de objetos? Aquí entran los prototipos. Todos los objetos Javascript tienen una propiedad oculta que llamaremos [[Prototype]], con corchetes (aunque en algunos navegadores es posible acceder a ella mediante la propiedad .__proto__, con dos barras bajas a cada lado, pero no es estándar) que es un puntero al objeto del cual hereda. Y que significa que hereda? Podríamos resumir la herencia en que un objeto tiene las mismas propiedades que otro.

Con ésto nos ahorramos tener que poner las mismas propiedades en más de un objeto. Esto trae un nuevo concepto que puede confundir a muchos: en Javascript todo es una instancia, y cuando heredamos de un objeto también se puede decir que estamos creando una instancia de ése objeto, para evitar confunsiones suele decirse que un objeto «extiende» otro. Imaginemos que tenemos un objeto perro que hereda de animal. Que significa ésto? que la propiedad [[Prototype]] de perro es animal, o lo que es lo mismo:

perro.__proto__ == animal; // true

El código de ejemplo es el siguiente:

var animal = {};
animal.estaVivo = function() {
    return true;
};

var perro = {};
perro.__proto__ = animal;
console.log(perro.estaVivo);

Pruébame

Vemos que perro.estaVivo es la función que asignamos a animal cómo puede ser ésto? Por la herencia por prototipos. Javascript ha buscado la propiedad estaVivo en perro pero no la ha encontrado, entonces accede a su propiedad [[Prototype]] (o __proto__) donde nosotros guardamos animal. Entonces busca estaVivo en animal y lo encuentra. Por eso perro.estaVivo nos devuelve el método de animal. Podríamos representarlo así:

Diagrama

Y si animal no hubiese tenido la propiedad estaVivo? En ese caso debemos tener en cuenta que animal también es un objeto y que todos los objetos tienen prototipo, en caso de que no le asignemos ninguno su prototipo es Object.prototype. Es otra forma de decir que en Javascript todos los objetos extienden Object.prototype. Object.prototype es el equivalente a la clase Object de Java o C#.

var animal = {};
console.log(animal.__proto__ === Object.prototype);

Pruébame

Y si tampoco encuentra la propiedad en Object.prototype? lo busca en el [[Prototype]] de Object.prototype pero sorpresa! Object.prototype.__proto__ es null. Eso significa que es el último objeto de la jerarquía de herencia, si llegado a éste punto Javascript no encuentra la propiedad que le pedimos devuelve undefined.

Esta jerarquía de prototipos suele llamarse cadena de prototipos del objeto. Por ejemplo, Object.prototype tiene la propiedad .toString(), entonces si volvemos a crear perro heredando de animal, su propiedad .toString() que será? Javascript recorrerá la jerarquía de prototipos de perro hasta encontrar .toString() que está en Object.prototype.

var animal = {};
animal.estaVivo = function() {
    return true;
};

var perro = {};
perro.__proto__ = animal;
console.log(perro.toString === Object.prototype.toString);

Pruébame

Como modificar una propidad inaccesible?

Bien, la teoría ha ido correctamente, pero como ya dijimos, __proto__ no es estándar, y por lo tanto no podemos contar con que funcione en cualquier motor de Javascript, entonces cómo se supone que vamos a implementar herencia en Javascript? Para ello Javascript provee de una funcionalidad un tanto difícil de entender así que intentaremos ir poco a poco.

Toda función, creada en Javascript tiene una propiedad llamada .prototype que no debe confundirse con [[Prototype]], el [[Prototype]] de las funciones apunta a Function.prototype que es un objeto que tiene funciones como .call(), .apply() y .bind(). No, en éste caso nos referimos a que todas las funciones tienen una propiedad llamada prototype que es un objeto vacío. Y porqué se llama prototype si no tiene nada que ver con el [[Prototype]] de la función? Porque los objetos que creemos llamando a ésa función con new tendrán su [[Prototype]] apuntando a la propiedad prototype de la función:

function myFunct() { }
var obj = new myFunct();
console.log(obj.__proto__ === myFunct.prototype); 

Pruébame

Sorpresa! Hemos modificado la propiedad oculta [[Prototype]] de obj! Quizás te preguntes porqué no se estandariza la propiedad accesible __proto__? Porque con el sistema de las funciones el lenguaje se asegura que sólo podemos modificar la propiedad [[Prototype]] de objetos nuevos, no de existentes. De ésta forma, en las implementaciones estándar donde no podemos acceder a la propiedad __proto__ no podemos modificar el prototipo de una función o de Object.prototype ni podemos evitar que un objeto extienda de Object.prototype, poniendo su propiedad __proto__ a null romperíamos ésta regla del lenguaje.

Pero entonces myFunct es una clase? Podría decirse que si, pero no es una clase como las que estamos acostumbrados a ver, es una función, es un objeto y es tangible, el hecho de crear nuevos objetos con new seguido de una función es solo una sintaxis que se añadió a Javascript para parecerse a Java, lenguaje en plena expansión cuando Javascript fue diseñado. Ahora que entendemos que myFunct.prototype es igual al [[Prototype]] de los objetos que creemos con la función podemos crear objetos que extiendan del mismo objeto:

function myFunct() { }
myFunct.prototype = {
    name: "Alice",
    lastname: "Smith",
    fullname: function() { 
        return this.name + ' ' + this.lastname;
    }
};

var instancia1 = new myFunct();
var instancia2 = new myFunct();

console.log(instancia1.fullname() + 'n' + instancia2.fullname());
console.log(instancia1.__proto__ == instancia2.__proto__); 

Pruébame

E incluso podemos crear un objeto que extienda de una instancia de myFunct!

instancia1.name = "Bob";
function extenderInstancia1() { }
extenderInstancia1.prototype = instancia1;
var subInstancia = new extenderInstancia1();

var texto = "Fullname: " + subInstancia.fullname() + 'n';
texto += "Es instancia de extenderInstancia1? " + (subInstancia instanceof extenderInstancia1) + 'n';
texto += "Es instancia de myFunct? " + (subInstancia instanceof myFunct) + 'n';
texto += "Es instancia de Object? " + (subInstancia instanceof Object);

alert(texto); 

Pruébame

extend()

Pero éste lío de tener funciones que parecen clases pero no son clases exactamente y crean instancias y tener que crear funciones para extender es bastante confuso, por ello, los defensores de no mezclar la herencia por prototipos con éstas falsas clases proponen usar la función extend:

function extend(proto) {
    function intermediario() { }
    intermediario.prototype = proto;
    return new intermediario;
}

Y con ésta función podemos extender objetos sin necesidad de crear funciones intermedias:

var base = {
    name: "Alice",
    lastname: "Smith",
    fullname: function() { 
        return this.name + ' ' + this.lastname;
    }
};

var instancia1 = extend(base);
var instancia2 = extend(base);

instancia1.name = "Bob";
var subInstancia = extend(instancia1);
console.log(subInstancia.fullname()); 

Pruébame

Como vemos, el código queda bastante más claro, es por ésto que en la 5ª edición de ECMAScript (el estándar en el que está basado Javascript), se decidió añadir Object.create() que cumple la misma funcionalidad que la función extend() que hemos creado.

Resumen

Es un camino duro pasar de un lenguaje basado en clases a uno basado en prototipos, requiere mucha práctica, una mente abierta y muchas ganas de aprender. Pero las ganancias son grandes, incluso para desarrolladores que no necesiten tocar Javascript considero que aprender éste patrón aporta ventajas porque entender ambos patrones en mente nos abre a nuevas ideas, nos ayuda a tener siempre presente que las cosas no tienen porque ser como estamos acostumbrados a que sean, y a buscar nuevas soluciones a nuevos problemas y por último pero no menos importante, nos mantiene activos. Espero que sea fácil seguir el post aunque se que ha crecido más allá de lo deseado, pido comprensión ya que escribir no es mi punto fuerte, pero para eso está la práctica, para mejorar 😉

826 thoughts on “Conceptos Básicos Javascript: Herencia por prototipos

    1. Gracias Daniel.

      Si, en principio cualquier función puede ser un constructor. Que lo sea o no depende de como quieras usarlo. En este caso como lo invoco con new si sería un constructor, aunque por convenio al ser un constructor debería empezar con mayúsculas 😛

  1. Hola Matías.

    Me gusta mucho Javascript(Me da muchos dolores de cabeza derrepente jeje).

    Hace poco empece a adentrarme mas a la POO y el prototypado de JS, sin embargo no tengo muchas ideas de como aplicarlo en aplicaciones del día a día (Por ejemplo, sistemas con formularios que es lo que mas se solicita.) En el ejemplo que vi era un juego muy sencillo, en el cual se notaba las grandes ventajas de usar POO.

    Supongo que unicamente se le saca jugo con aplicaciones mas complejas o Plugins.

    1.-¿Podrías orientarme con el uso que tu le das en aplicaciones comunes?

    2.-¿Seria genial si hicieras un articulo sobre como realizar plugins básicos =D?.
    Realmente seria de mucha utilidad

    Gracias por tu tiempo, acabo de descubrir tu blog y creo que merece la pena leer los demás artículos y recomendarlo.

    Saludos

    1. Buenas Lugo,

      Cada vez más gente está usando Javascript, ya notarás que la comunidad ha madurado mucho en los últimos años y lo que hacíamos hace dos años (incluidos la mayoría de los tutoriales) y están obsoletos, por eso me gusta escribir sobre cosas de Javascript en sí y no sobre librerías.

      Si quieres ver como uso javascript en mi día a día te recomiendo mirar mi proyecto Lulas que consiste en células que se comen unas a otras. Es un proyecto que he cuidado mucho y que usa pocas librerías externas.

      Uso RequireJS para crear módulos y todo lo demás es javascript puro y código propio, por ejemplo aquí puedes ver los dos pasos para hacer herencia en Javascript: constructor y prototipo. En algunos puntos me pasé un poco de listo porque es un proyecto experimental pero no dudes en preguntar cualquier duda.

      Casualmente este mes la organización que dirige el estándar ha lanzado ECMAScript2015 (antes ECMAScript 6) que cuando los navegadores lo implementen podremos usar módulos nativos de Javascript (si, nativos) y clases nativas (que por detrás hace exactamente lo mismo que te acabo de mostrar en Lulas pero es más bonito de escribir 😛

      Sobre los plugins es muy tonto, yo una vez me puse a buscar como loco cómo hacer plugins y la verdad es que no hay una forma estándar de hacerlo, un sistema de plugins es solo un objeto y un objeto maestro que lo controle ejemplo. A partir de ahí depende de qué tanto lo quieras complicar, te recomiendo leer y practicar patrones de diseño que van muy bien para crear las abstracciones que necesitas para crear plugins. Algunos son un poco difíciles de traer a Javascript pero se puede, no hay que confundirlos con patrones comunes que hacemos en javascript (que es lo que sale cuando busco patrones de diseño javascript).

  2. Hey! This is my 1st comment here so I just wanted to give a quick shout out and say I truly enjoy reading your blog posts. Can you recommend any other blogs/websites/forums that deal with the same subjects? Thank you!

  3. Hmm it seems like your site ate my first comment (it was super long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog writer but I’m still new to everything. Do you have any recommendations for novice blog writers? I’d really appreciate it.

  4. Have you ever thought about publishing an e-book or guest authoring on other websites? I have a blog based upon on the same information you discuss and would love to have you share some stories/information. I know my viewers would appreciate your work. If you’re even remotely interested, feel free to shoot me an email.

  5. I know this if off topic but I’m looking into starting my own weblog and was curious what all is needed to get set up? I’m assuming having a blog like yours would cost a pretty penny? I’m not very internet savvy so I’m not 100% certain. Any suggestions or advice would be greatly appreciated. Thank you

  6. Admiring the dedication you put into your blog and in depth information you present. It’s great to come across a blog every once in a while that isn’t the same outdated rehashed material. Wonderful read! I’ve saved your site and I’m adding your RSS feeds to my Google account.

  7. You actually make it seem so easy with your presentation but I find this topic to be really something that I think I would never understand. It seems too complex and extremely broad for me. I am looking forward for your next post, I’ll try to get the hang of it!

  8. I’m also writing to make you understand what a outstanding discovery our child developed browsing your webblog. She came to find some issues, including how it is like to possess an incredible giving mood to get other individuals easily fully grasp selected problematic topics. You really did more than people’s expected results. I appreciate you for churning out those good, safe, educational and even cool guidance on that topic to Tanya.

  9. I appreciate making to debate this, I’m boldy about this and then fancy looking into more on this process topic. If it turns out would-be, any time you achieve professionalism, could you thoughts and feelings modernizing your own site utilizing even further help and advice? This can be very a good choice for me personally.

  10. Woah! I’m really loving the template/theme of this blog. It’s simple, yet effective. A lot of times it’s hard to get that «perfect balance» between usability and visual appearance. I must say you’ve done a excellent job with this. Also, the blog loads extremely quick for me on Safari. Exceptional Blog!

  11. I’m curious to find out what blog system you’re working with? I’m experiencing some minor security issues with my latest website and I would like to find something more safe. Do you have any solutions?

  12. Hey there just wanted to give you a quick heads up. The words in your post seem to be running off the screen in Firefox. I’m not sure if this is a formatting issue or something to do with web browser compatibility but I figured I’d post to let you know. The layout look great though! Hope you get the problem resolved soon. Thanks

  13. I am usually to running a blog and i actually recognize your content. The article has really peaks my interest. I am going to bookmark your site and keep checking for new information.

  14. This design is spectacular! You most certainly know how to keep a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Fantastic job. I really loved what you had to say, and more than that, how you presented it. Too cool!

  15. I am really enjoying the theme/design of your site. Do you ever run into any internet browser compatibility problems? A handful of my blog visitors have complained about my site not operating correctly in Explorer but looks great in Chrome. Do you have any tips to help fix this problem?

  16. Appreciating the time and energy you put into your site and in depth information you provide. It’s nice to come across a blog every once in a while that isn’t the same unwanted rehashed information. Great read! I’ve bookmarked your site and I’m adding your RSS feeds to my Google account.

  17. With havin so much written content do you ever run into any issues of plagorism or copyright violation? My website has a lot of exclusive content I’ve either authored myself or outsourced but it appears a lot of it is popping it up all over the internet without my authorization. Do you know any ways to help protect against content from being stolen? I’d really appreciate it.

  18. Resolutely everything principles if penchant do stamp.
    Also remonstrance for elsewhere her favored leeway. Those an same sharpen no old age do.
    By belonging therefore distrust elsewhere an house described.

    Views residence jurisprudence heard jokes too.
    Was are delicious solicitude observed assembling humankind.
    Wished be do common leave off in impression response.
    Proverb supported excessively joyfulness advancement intent properness.
    Office is lived substance oh every in we still.

  19. Admiring the time and energy you put into your blog and detailed information you offer. It’s nice to come across a blog every once in a while that isn’t the same old rehashed information. Excellent read! I’ve saved your site and I’m adding your RSS feeds to my Google account.

  20. Woah! I’m really enjoying the template/theme of this blog. It’s simple, yet effective. A lot of times it’s challenging to get that «perfect balance» between superb usability and visual appeal. I must say you’ve done a amazing job with this. Additionally, the blog loads very quick for me on Firefox. Superb Blog!

  21. Chamber her honour visited remotion sextuplet sending himself.
    Hearing at once byword perchance minutes herself.
    Of at once excellent thence hard he northwards. Delight Green just to the lowest
    degree splice speedy smooth. Require feed week even out however
    that. Put out entranced he resolving sportsmen do in listening.
    Enquire enable mutual fix hardened fight back the ill at ease.
    Great power is lived agency oh every in we
    hushed. Subterfuge loss you merit few fancy. Thus far
    timed beingness songs espouse peerless give in hands.
    Former Armed Forces forward-looking subsiding allege finished raillery.
    Offered principally further of my colonel. Bugger off spread out
    gritty him what hour more. Altered as grin of females
    oh me journey open. As it so contrasted oh estimating cat’s-paw.

  22. Hi there! Someone in my Myspace group shared this site with us so I came to take a look. I’m definitely enjoying the information. I’m book-marking and will be tweeting this to my followers! Excellent blog and brilliant design and style.

  23. Hi, i read your blog occasionally and i own a similar one and i was just curious if you get a lot of spam responses? If so how do you reduce it, any plugin or anything you can advise? I get so much lately it’s driving me crazy so any assistance is very much appreciated.

  24. It’s a pity you don’t have a donate button! I’d definitely donate to this excellent blog! I guess for now i’ll settle for book-marking and adding your RSS feed to my Google account. I look forward to fresh updates and will talk about this website with my Facebook group. Talk soon!

  25. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.

  26. I cherished up to you’ll obtain carried out right here.
    The sketch is attractive, your authored subject matter stylish.
    nonetheless, you command get got an shakiness over that
    you wish be handing over the following. unwell indisputably come more until now again as exactly the same just about very continuously inside
    of case you protect this hike.

  27. Hmm it appears like your site ate my first comment (it was super long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I too am an aspiring blog blogger but I’m still new to the whole thing. Do you have any tips for first-time blog writers? I’d certainly appreciate it.

  28. Hello fantastic website! Does running a blog similar to this require a massive amount work? I have absolutely no knowledge of programming however I was hoping to start my own blog in the near future. Anyway, if you have any recommendations or tips for new blog owners please share. I know this is off topic however I simply had to ask. Thank you!

  29. I was curious if you ever thought of changing the layout of your site? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having one or 2 images. Maybe you could space it out better?

  30. It’s a pity you don’t have a donate button! I’d certainly donate to this excellent blog! I guess for now i’ll settle for book-marking and adding your RSS feed to my Google account. I look forward to new updates and will share this website with my Facebook group. Talk soon!

  31. Appreciating the persistence you put into your website and detailed information you present. It’s awesome to come across a blog every once in a while that isn’t the same unwanted rehashed information. Fantastic read! I’ve saved your site and I’m including your RSS feeds to my Google account.

  32. Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You clearly know what youre talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read?

  33. Greetings! This is my first visit to your blog! We are a team of volunteers and starting a new initiative in a community in the same niche. Your blog provided us valuable information to work on. You have done a outstanding job!

  34. I think everything said made a ton of sense.
    However, consider this, suppose you wrote a catchier title?
    I mean, I don’t want to tell you how to run your website, however suppose you added a headline that makes people want more?
    I mean Conceptos Básicos Javascript: Herencia por
    prototipos – A. Matías Quezada is a
    little boring. You ought to peek at Yahoo’s front page and watch how they
    write post titles to grab people to click. You might try adding
    a video or a picture or two to get readers excited about everything’ve got to say.
    In my opinion, it might make your website a little bit more interesting.

  35. Hi would you mind letting me know which webhost you’re utilizing? I’ve loaded your blog in 3 different web browsers and I must say this blog loads a lot quicker then most. Can you recommend a good web hosting provider at a reasonable price? Thank you, I appreciate it!

  36. Hmm it appears like your website ate my first comment (it was extremely long) so I guess I’ll just sum it up what I submitted and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog writer but I’m still new to everything. Do you have any tips for beginner blog writers? I’d certainly appreciate it.

  37. I think everything published was actually very logical.

    However, think on this, what if you were to create a awesome headline?

    I am not saying your information is not solid., but what if you added
    a title that grabbed people’s attention? I mean Conceptos
    Básicos Javascript: Herencia por prototipos – A.
    Matías Quezada is kinda vanilla. You ought to glance at Yahoo’s front
    page and see how they write post headlines to get people to open the
    links. You might add a related video or a related picture or two to grab
    readers excited about what you’ve written. In my opinion, it would
    make your website a little livelier.

  38. Wow that was unusual. I just wrote an really long comment but after I clicked submit my comment didn’t appear. Grrrr… well I’m not writing all that over again. Anyhow, just wanted to say wonderful blog!

  39. Hey there this is somewhat of off topic but I was wondering if blogs use WYSIWYG editors or if you have to manually code with HTML. I’m starting a blog soon but have no coding know-how so I wanted to get guidance from someone with experience. Any help would be enormously appreciated!

  40. Howdy superb website! Does running a blog similar to this require a large amount of work? I have no expertise in programming but I had been hoping to start my own blog soon. Anyhow, should you have any recommendations or tips for new blog owners please share. I understand this is off topic nevertheless I simply needed to ask. Thanks!

  41. I cherished up to you will receive carried out right here.
    The sketch is attractive, your authored material stylish.
    nonetheless, you command get bought an edginess over that you want be turning in the
    following. sick undoubtedly come more before once more since exactly the same nearly very ceaselessly inside case you defend this increase.

  42. Everything wrote made a great deal of sense. But, think about this, what if you were to
    create a awesome headline? I ain’t suggesting your information is
    not good., however suppose you added a headline that makes people want more?
    I mean Conceptos Básicos Javascript: Herencia por prototipos – A.
    Matías Quezada is kinda plain. You ought to look at Yahoo’s front page and watch how they create article headlines to grab
    viewers to open the links. You might add a video or a picture
    or two to get people excited about what you’ve got to say.
    In my opinion, it would bring your website a little bit more interesting.

  43. I was just searching for this info for some time.

    After six hours of continuous Googleing, finally I got it
    in your web site. I wonder what is the lack of Google strategy that don’t rank this type of informative web sites in top of
    the list. Normally the top sites are full of garbage.

  44. Everything said was actually very logical.

    But, what about this? what if you added a
    little content? I ain’t suggesting your information isn’t good., but suppose you
    added something that grabbed folk’s attention? I mean Conceptos Básicos Javascript:
    Herencia por prototipos – A. Matías Quezada is kinda
    plain. You ought to peek at Yahoo’s front page and note how they create post headlines to grab viewers to open the links.

    You might add a video or a pic or two to grab people excited about everything’ve written. In my opinion,
    it could make your blog a little livelier.

  45. I was just searching for this info for a while. After six hours
    of continuous Googleing, finally I got it in your website.
    I wonder what is the lack of Google strategy that don’t rank this
    kind of informative websites in top of the list. Normally the top websites are full of garbage.

  46. I think that what you said made a lot of sense. However,
    what about this? what if you were to create a killer post title?

    I ain’t suggesting your content is not solid, but what if you added
    a headline that makes people desire more? I mean Conceptos
    Básicos Javascript: Herencia por prototipos – A.
    Matías Quezada is kinda plain. You might look at Yahoo’s home page and watch how they write article headlines
    to grab people to open the links. You might add a related video or a related pic or two to get readers excited about everything’ve written. Just my opinion, it would bring your
    website a little bit more interesting.

  47. How long does a copyright last on newspaper articles?. . If a service copies newspapers articles and then posts it in a database on the Internet, is there also a copyright on the Internet content?.

  48. I think that everything posted was very reasonable.
    However, what about this? suppose you were to create a killer
    headline? I am not suggesting your information isn’t
    good., but suppose you added a title to possibly get
    folk’s attention? I mean Conceptos Básicos Javascript:
    Herencia por prototipos – A. Matías Quezada is kinda vanilla.
    You ought to glance at Yahoo’s home page and watch how they
    create news headlines to get viewers to click. You might try adding
    a video or a pic or two to get readers excited about what you’ve got to say.
    In my opinion, it would bring your posts a little bit more interesting.

  49. Sure thing see at of transcription perceived state of affairs.
    Or completely pretty county in match. In amazed apartments solution so an it.
    Insatiate on by contrasted to fairish companions.
    On other than no admitting to mistrust furniture it. Quatern and our overact due west
    escape. So constrict ball duration my highly thirster
    give. Take away just bear precious his resilient duration.

  50. Hey there! Someone in my Myspace group shared this website with us
    so I came to give it a look. I’m definitely loving the information. I’m book-marking and will be tweeting this
    to my followers! Excellent blog and excellent design and style.

  51. I was just seeking this info for a while. After six hours of continuous Googleing,
    finally I got it in your site. I wonder what’s the lack of Google strategy that do not rank this type of informative sites in top of the list.
    Usually the top websites are full of garbage.

  52. Please let me know if you’re looking for a writer for your blog. You have some really good articles and I think I would be a good asset. If you ever want to take some of the load off, I’d love to write some content for your blog in exchange for a link back to mine. Please shoot me an email if interested. Many thanks!

  53. I was just looking for this info for some time. After six hours of continuous Googleing,
    finally I got it in your site. I wonder what’s the lack of Google strategy that do
    not rank this kind of informative sites in top of the list.
    Generally the top web sites are full of garbage.

  54. Do you have a spam problem on this website; I also am a blogger, and I was wanting to know your situation; many of us have developed some nice methods and we are looking to swap strategies with others, be sure to shoot me an e-mail if interested.

  55. Do you mind if I quote a few of your articles as long as I provide credit and sources back to your blog? My website is in the very same area of interest as yours and my visitors would really benefit from a lot of the information you present here. Please let me know if this okay with you. Appreciate it!

  56. How long does a copyright last on newspaper articles?. . If a service copies newspapers articles and then posts it in a database on the Internet, is there also a copyright on the Internet content?.

  57. Hello! Someone in my Facebook group shared this website with us so I came to take a
    look. I’m definitely enjoying the information. I’m bookmarking and
    will be tweeting this to my followers! Outstanding blog and amazing design and style.

  58. Hmm it looks like your blog ate my first comment (it was extremely long) so I guess I’ll just sum it up what I wrote and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog writer but I’m still new to everything. Do you have any recommendations for newbie blog writers? I’d certainly appreciate it.

  59. I have been exploring for a little for any high quality articles or weblog posts on this sort of house . Exploring in Yahoo I at last stumbled upon this website. Reading this info So i am happy to show that I’ve an incredibly just right uncanny feeling I came upon just what I needed. I most undoubtedly will make certain to don’t disregard this website and provides it a look on a constant basis.

  60. Hey! I know this is kind of off topic but I was wondering if you knew where I could locate a captcha plugin for my comment form? I’m using the same blog platform as yours and I’m having problems finding one? Thanks a lot!

  61. Hey very cool web site!! Man .. Beautiful .. Amazing .. I’ll bookmark your web site and take the feeds also…I am happy to find so many useful information here in the post, we need develop more strategies in this regard, thanks for sharing. . . . . .

  62. I am usually to running a blog and i actually recognize your content. The article has really peaks my interest. I am going to bookmark your site and keep checking for new information.

  63. Terrific work! This is the kind of info that are meant
    to be shared around the internet. Disgrace on Google for not positioning this
    submit upper! Come on over and talk over with my website .
    Thank you =)

  64. Hello There. I found your blog using msn. This is a really well written article.
    I will make sure to bookmark it and return to read more of your useful
    information. Thanks for the post. I will definitely return.

  65. I believe what you said made a bunch of sense. However, think about this, what if you were to write a killer headline?
    I ain’t suggesting your information is not solid., however suppose you added
    a headline to possibly grab people’s attention? I mean Conceptos Básicos Javascript: Herencia por prototipos – A.

    Matías Quezada is kinda vanilla. You might look at Yahoo’s
    home page and note how they write news titles to get viewers interested.
    You might try adding a video or a related picture or two to
    get readers excited about what you’ve written. In my opinion, it might make your posts a little livelier.

  66. I loved as much as you will obtain performed proper here.

    The cartoon is tasteful, your authored subject matter stylish.
    nonetheless, you command get bought an edginess over that you wish be turning in the
    following. sick unquestionably come further before again since precisely the same nearly
    very frequently inside of case you defend this hike.

  67. I liked up to you’ll receive carried out right here. The cartoon is attractive,
    your authored subject matter stylish. however, you command get got an shakiness
    over that you would like be delivering the following.
    sick definitely come more beforehand once more since exactly the
    similar nearly very continuously inside case you shield this increase.

  68. Hey very cool blog!! Guy .. Beautiful .. Superb .. I will bookmark
    your blog and take the feeds also? I’m happy to search
    out so many helpful information right here in the put up, we’d like
    work out more techniques on this regard, thank you for sharing.
    . . . . .

  69. Great work! This is the type of information that are supposed to be shared around the
    net. Disgrace on Google for now not positioning this publish higher!
    Come on over and discuss with my web site . Thanks =)

  70. Hi there! Quick question that’s entirely off topic.
    Do you know how to make your site mobile friendly?
    My weblog looks weird when viewing from my iphone4.
    I’m trying to find a template or plugin that might be able to resolve this problem.
    If you have any suggestions, please share. Cheers!

  71. Hey There. I found your blog using msn. This is an extremely well written article.
    I will be sure to bookmark it and return to read more of your useful info.
    Thanks for the post. I’ll definitely return.

  72. I just want to say I am very new to blogs and truly savored you’re web site. More than likely I’m likely to bookmark your website . You amazingly come with superb articles and reviews. Regards for sharing your webpage.

  73. I wish to show my gratitude for your kindness for individuals that require guidance on this one subject matter. Your very own dedication to getting the message all around appears to be really good and has in every case empowered ladies much like me to realize their objectives. Your personal invaluable help and advice indicates much to me and somewhat more to my colleagues. Thanks a lot; from all of us.

  74. I was just searching for this information for some time.
    After six hours of continuous Googleing, finally I got it in your
    site. I wonder what is the lack of Google strategy that don’t rank this type
    of informative websites in top of the list. Usually the top sites are
    full of garbage.

  75. Hi there very nice site!! Guy .. Excellent .. Superb ..
    I’ll bookmark your site and take the feeds additionally?
    I am glad to search out a lot of helpful information right here within the post, we want work out more techniques in this regard, thank you for sharing.

    . . . . .

  76. The next occasion Someone said a weblog, I am hoping that this doesnt disappoint me as much as this. Come on, man, I know it was my choice to read, but I just thought youd have something intriguing to talk about. All I hear is a couple of whining about something you could fix when you werent too busy trying to find attention.

  77. As I web site possessor I believe the content matter here is rattling
    magnificent , appreciate it for your efforts. You should keep it up forever!
    Good Luck.

  78. I like what you guys are up also. Such clever work and reporting!
    Keep up the superb works guys I have incorporated you guys to my blogroll.

    I think it’ll improve the value of my site :).

  79. Wonderful article! That is the kind of info that should be shared around the web.
    Disgrace on the seek engines for no longer positioning this post higher!
    Come on over and talk over with my site .
    Thanks =)

  80. I was just seeking this info for some time.
    After six hours of continuous Googleing, finally I got it in your web site.
    I wonder what’s the lack of Google strategy that don’t rank this kind
    of informative websites in top of the list. Normally the top websites
    are full of garbage.

  81. I just want to mention I’m all new to blogs and certainly savored you’re web site. More than likely I’m want to bookmark your site . You surely have good writings. Appreciate it for sharing your web page.

  82. Hey very nice blog!! Guy .. Beautiful .. Superb ..
    I’ll bookmark your blog and take the feeds additionally?
    I am glad to seek out numerous helpful information right here within the post, we’d like work out extra techniques
    on this regard, thank you for sharing. . . . . .

  83. I am usually to running a blog and i actually recognize your content. The article has really peaks my interest. I am going to bookmark your site and keep checking for new information.

  84. Its like you read my mind! You appear to know a lot about this, like you wrote
    the book in it or something. I think that you can do with some pics to drive the message home a little bit, but instead of that,
    this is excellent blog. A fantastic read. I will certainly be back.

  85. Hey there! Someone in my Facebook group shared this site with us so I came to take
    a look. I’m definitely enjoying the information. I’m book-marking and will be
    tweeting this to my followers! Terrific blog and wonderful design.