Build a Person class, delegate don't duplicate
Just so you know, undefined in JS is mutable. It's value can be changed. You could resort to using void 0 instead of undefined.
In JS, assignment operations are as good as values, equivalent to the value assigned. Also, the || acts like a "default" operation, where if the left-side value is falsy (ie, blank string, undefined, null, false, 0), the right-side value is used. And so, getFirstName (and similarly, getLastName) can be simplified into: 

return this.firstName = this.firstName || this.defaultFirst();

For defaultFirst and defaultLast, essentially you're splitting by space and getting the first and last contiguous word, respectively. And so, it can be simplified using split and shift or pop:

// For first name:
return this.fullName.split(' ').shift();

// For last name:
return this.fullName.split(' ').pop();