When you assign an object to a prototype it changes the prototypal inheritance of that object. The prototype of the object will no longer have the original constructor function and it will point to `Object` instead!

This affects your code, as it is evidenced by adding the following line:

    console.log(p1.constructor === Object); // returns: true

Two ways to correct this:

**A.** Assign the functions directly. Don't wrap them in an object. That would look like this:

    myApp.model.Person.prototype.sayName = function(){
       alert(this.name);
    };
    
    myApp.model.Person.prototype.sayHi = function(){
        alert("Hi, " + this.name);
    };

**B.** Reassign the constructor to your object. You can do that by adding a line of code into your object, like this:

    myApp.model.Person.prototype = {
        constructor: myApp.model.Person, //  <========
        sayName: function () {
            alert(this.name);
        },
        sayHi: function () {
            alert("Hi, " + this.name);
        }
    };
 
Which is the same as this:

    myApp.model.Person.prototype.constructor = myApp.model.Person;

It's worth noting that restoring the constructor in this manner creates a property with `enumerable` set to `true`. Native constructors are not enumerable by default. So if you're using ES5, this might be the preferred way to restore the constructor:

    Object.defineProperty(myApp.model.Person.prototype, 'constructor', {
    enumerable: false,
    value: myApp.model.Person
    });

More reading on this: http://javascript.info/tutorial/constructor