Search code examples
javascriptprototypeprototype-programming

How does one manipulate a variable in a prototype?


I'm new to Javascript and was wondering how a public variable in a prototype can be modified.

function Thing (val)
{
    this.x = val;

    this.addToX = function (valIn)
    {
        this.x += valIn;
    };
}

function ChildThing ()
{
    this.y = 55;
}

ChildThing.prototype = new Thing(10);

var frank = new ChildThing();

console.log("out1: " + frank.x);

frank.addToX(10);

console.log("out2: " + frank.x);

This code takes the value in the prototype x which is 10 and adds 10 to it in the addToX function. The new x value is stored in the top level object rather than replacing the current x value in the prototype.

Is there a way to overwrite the existing x in the prototype or am I using Javascript wrong?


Solution

  • That depends. What would be the point of altering x on the prototype? Generally you don't want to chang shared properties. But I imagine that there could be a use case (generating new id?).

    As for the question: you can simply do:

    this.addToX = function(valIn) {
        ChildThing.prototype.x += valIn;
    };
    

    Again I do not advice doing it.

    EDIT You can make it without referencing the child by defining the prototype before setting it as a prototype, i.e.

    var my_proto = new Thing(10);
    ChildThing.prototype = my_proto;
    

    and then

    this.addToX = function(valIn) {
        my_proto.x += valIn;
    };
    

    Or you can even play with the singleton pattern.