this is my very first post! I have a quick question in regarding inheritance in javascript.
Of course the ‘extend2’ method is used to inherit child objects from the parent object using a for-in loop.
var extend2 = function (child, parent) {
var c = child.prototype;
var p = parent.prototype;
for (var i in p) {
c[i] = p[i];
}
}
I’m currently reading “Object Oriented Javascript” by Stoyan Stefanov. It’s an awesome book.
Can anyone give me a good detailed explanation of how the child’s prototype object is not entirely overwritten or replaced but it’s just augmented?
How is it that when the objects inherit, they copy (primitive data types) instead of being looked up as a reference by using the extend2 function?
This would really help thanks!
Primitive data types in javascript are passed via value, rather than reference. Thus when you copy a value it is actually copying it, not referring to it.
Traditionally this is because a primitive was literally encoded in the memory in such a way (so the primitive int 7 would be encoded in memory as 0x7. When dealing with objects, however, they are encoded as a pointer to the memory location where the actualy object is. Thus, when you copy the value it is merely a copy of the reference pointer, not the object that that pointer referrs to.
As for the fact that the child’s prototype is not replaced, that is because a prototype in java is merely another object. So a prototype may look like:
Which would indicate that instances of the object would initialize with a field called
someFieldwhose value is5. with the above code, each entry in the object is copied to the child prototype, but nothing is deleted. Thus if the child prototype looks like:Then performing the above extend2 command will overwrite someField, but not someOtherField, so the resulting prototype would be: