Passing arguments when using Object.create as opposed to new

javascript, object-create

Solution

You must call the constructor using `Object.call(this)` and then pass your arguments.

function Human(eyes, phrase) {
    this.eyes = eyes || false;
    this.phrase = phrase;
}

Human.prototype.hasEyes = function() {
    return this.eyes;
}

Human.prototype.sayPhrase = function() {
    return this.phrase;
}

function Male(name) {
    Human.call(this, true, "Something to say"); //notice the call and the arguments
    this.name = name || "No name";
}

Male.prototype = Object.create(Human.prototype);

var Sethen = new Male("Sethen");

console.log(Sethen.hasEyes());
console.log(Sethen.sayPhrase());

console.log(Object.getOwnPropertyNames(Sethen));

This works and now the object `Male` has the properties of `eyes` and `phrase`

Problem

This question isn't a duplicate of Using "Object.create" instead of "new". The thread in question doesn't focus on passing arguments correctly when using `Object.create` I am curious as to how I would go about initializing objects using `Object.create` as opposed to `new`. Here is my code so far: ``` function Human(eyes) { this.eyes = eyes || false; } Human.prototype.hasEyes = function() { return this.eyes; } function Male(name) { this.name = name || "No name"; } Male.prototype = new Human(true); //passing true to the Human constructor var Sethen = new Male("Sethen"); console.log(Sethen.hasEyes()); ``` As you can see above, the `Male.prototype = new Human(true);` creates a new object with true. When the `hasEyes()` function is run, this logs true as expected. So, my question is.. using `Object.create` how would I go about doing this the same way passing a `true` parameter??

Original source

Related problems