Understanding OO JavaScript with a simple scenario
Pretty good code.

From an OOP perspective, this is exactly right. From a formatting perspective, this is almost flawless. I hardly have anything to say about this code, but I see very little that I would change.

The only issue that I see is an irregular formatting choice. These commas:

Shape.prototype = {
    constructor: Shape
    , getId: function() {
        return this.id
    }
    , getSize: function() {
        return this.size
    }
    , setSize: function (size)  {
        this.size = size
    }
}


should be like this:

Shape.prototype = {
    constructor: Shape,
    getId: function () {
         return this.id
    },
    getSize: function () {
         return this.size
    },
    setSize: function (size)  {
        this.size = size
    }
};


Oh and you need to read this world-changing answer about OO practices in JS.

Be sure to press B while reading that, because if not, you'll evolve into a legendary OOP developer.