Q:

Can we cast a generic object to a custom object type in javascript? 

For example, I already have this object somewhere in the code, it is a generic object:
var person1={lastName:"Freeman",firstName:"Gordon"};

I have the constructor for a Person object:
function Person(){
 this.getFullName=function(){
  return this.lastName + ' ' + this.firstName;
 }
}

Is there a simple syntax that allows us to convert person1 to an object of type Person? 

A:

The answer of @PeterOlson may be worked back in the day but it looks like Object.create is changed. 
  I would go for the copy-constructor way like @user166390 said in the comments. 
  The reason I necromanced this post is because I needed such implementation. 

Nowadays we can use Object.assign (credits to @SayanPal solution) & ES6 syntax:
class Person {
  constructor(obj) {
    obj && Object.assign(this, obj);
  }

  getFullName() {
    return `${this.lastName} ${this.firstName}`;
  }
}

Usage:
const newPerson = new Person(person1)
newPerson.getFullName() // -> Freeman Gordon

ES5 answer below
function Person(obj) {
    for(var prop in obj){
        // for safety you can use the hasOwnProperty function
        this[prop] = obj[prop];
    }
}

Usage:
var newPerson = new Person(person1);
console.log(newPerson.getFullName()); // -> Freeman Gordon

Using a shorter version, 1.5 liner:
function Person(){
    if(arguments[0]) for(var prop in arguments[0]) this[prop] = arguments[0][prop];
}

jsfiddle

A:

No.  
But if you're looking to treat your person1 object as if it were a Person, you can call methods on Person's prototype on person1 with call:
Person.prototype.getFullNamePublic = function(){
    return this.lastName + ' ' + this.firstName;
}
Person.prototype.getFullNamePublic.call(person1);

Though this obviously won't work for privileged methods created inside of the Person constructor—like your getFullName method.  

A:

This is not exactly an answer, rather sharing my findings, and hopefully getting some critical argument for/against it, as specifically I am not aware how efficient it is. 
I recently had a need to do this for my project.  I did this using Object.assign, more precisely it is done something like this:Object.assign(new Person(...), anObjectLikePerson). 
Here is link to my JSFiddle, and also the main part of the code:
function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;

  this.getFullName = function() {
    return this.lastName + ' ' + this.firstName;
  }
}

var persons = [{
  lastName: "Freeman",
  firstName: "Gordon"
}, {
  lastName: "Smith",
  firstName: "John"
}];

var stronglyTypedPersons = [];
for (var i = 0; i < persons.length; i++) {
  stronglyTypedPersons.push(Object.assign(new Person("", ""), persons[i]));
}

