Javascript: prototypal inheritance and the prototype property

Posted by JanD on Stack Overflow See other posts from Stack Overflow or by JanD
Published on 2010-03-14T01:30:37Z Indexed on 2010/04/06 21:33 UTC
Read the original article Hit count: 372

Filed under:
|

Hi,

I have a simple code fragment in JS working with prototype inheritance.

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

//the following code block has a alternate version
var mammal = {
    color: "brown",
    getColor: function() {
        return this.color;
    }
}

var myCat = object(mammal);
myCat.meow = function(){return "meow";}

that worked fine but adding this:

mammal.prototype.kindOf = "predator";

does not. ("mammal.prototype is undefined")

Since I guessed that object maybe have no prototype I rewrote it, replacing the var mammal={... block with:

function mammal() {
    this.color = "brown";
    this.getColor = function() { return this.color; }
}

which gave me a bunch of other errors:

"Function.prototype.toString called on incompatible object"
and if I try to call _myCat.getColor()
"myCat.getColor is not a function"


Now I am totally confused. After reading Crockford, and Flanagan I did not get the solution for the errors. So it would be great if somebody knows...

- why is the prototype undefined in the first example (which is foremost concern; I thought the prototype of explicitly set in the object() function)

- why get I these strange errors trying to use the mammal function as prototype object in the object() function?

Edit by the Creator of the Question: These two links helped a lot too:

Prototypes_in_JavaScript on the spheredev wiki explains the way the prototype property works relativily simple. What it lacks is some try-out code examples. Some good examples are provided by Morris John's Article. I personally find the explanations are not that easy as in the first link, but still very good. The most difficult part even after I actually got it is really not to confuse the .prototype propery with the internal [[Prototype]] of an object.

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about inheritance