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
JavaScript
|inheritance
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