Q:

JavaScript Object prototype not returned via Factory

I've managed to create a 'factory-like' function called "createHumanByGender", however, the returned object doesn't allow me to call its prototype method "Human.prototype.getFullName()".
Would there be any reason why this happening?
Code is below:
// get female instance of Jade
var jade = createHumanByGender.bind( this, 'Female', 'Jade', 'Taylor' )();
console.log( jade.getFullName() );

// ------------------------------------------------
// HUMAN
function Human ( forename, surname ) {
    this.forename = forename;
    this.surname = surname;
    this.age = 0;
}

Human.prototype = {
    getForename : function () {
        return this.forename;
    },
    getSurname : function () {
        return this.surname;
    },
    getFullName : function () {
        return this.forename + ' ' + this.surname;
    }
};

// MALE
function Male ( forename, surname ) {
    Human.call( this, forename, surname );
    this.gender = 'Male';
}
Male.prototype = Object.create( Human.prototype );

// FEMALE
function Female ( forename, surname ) {
    Human.call( this, forename, surname );
    this.gender = 'Female';
}
Female.prototype = Object.create( Human.prototype );

// GENDER
function createHumanByGender ( gender, forename, surname ) {
    return new this[gender]( forename, surname );
}

A:

In your code, you are calling the constructor before the code runs that assigns the prototype so your object has not inherited methods from a prototype.  Move your call to the factory function to after the definition of the constructors.
Also, it's a generally bad practice to use this the way you are using it since it probably won't work in strict mode.  Either directly reference window is that's what you want or put your constructor functions as properties of some namespace object and look them up on that object directly.
This version of your code works (working demo here):
// ------------------------------------------------
// HUMAN
function Human ( forename, surname ) {
    this.forename = forename;
    this.surname = surname;
    this.age = 0;
}

Human.prototype = {
    getForename : function () {
        return this.forename;
    },
    getSurname : function () {
        return this.surname;
    },
    getFullName : function () {
        return this.forename + ' ' + this.surname;
    }
};

// MALE
function Male ( forename, surname ) {
    Human.call( this, forename, surname );
    this.gender = 'Male';
}
Male.prototype = Object.create( Human.prototype );

// FEMALE
function Female ( forename, surname ) {
    Human.call( this, forename, surname );
    this.gender = 'Female';
}
Female.prototype = Object.create( Human.prototype );

// GENDER
function createHumanByGender ( gender, forename, surname ) {
    var f = this[gender];
    return new f( forename, surname );
}

// get female instance of Jade
var jade = createHumanByGender.bind( this, 'Female', 'Jade', 'Taylor' )();
console.log( jade.getFullName() );

FYI, I'd suggest you change your factory function to this:
// GENDER
function createHumanByGender ( gender, forename, surname ) {
    var f = window[gender];
    return new f( forename, surname );
}

And, then call it like this:
// get female instance of Jade
var jade = createHumanByGender('Female', 'Jade', 'Taylor');
console.log( jade.getFullName() );

FYI, if you really want to cause a this value in a function you're going to immediately call, use .call() instead of .bind() anyway - but neither is needed here.

