I explore the deep end of JavaScript.
Well, let's say I have a constructor function like this. Yes, I know this is a weird way of creating a constructor function, but ...
function Animal(name){
return { name };
}
And I wanna add a prototype property like walk()
, but it doesn't work here. I know it looks stupid, but...
Animal.prototype.walk = function () {
console.log(`${this.name} is walking ...`);
}
QUESTION: Is there any way that I can add this walk property as a prototype property?
If you have to explicitly return an object that isn't this
in the constructor, then:
Create the prototype object outside, then use Object.create
inside the constructor:
const animalProto = {
walk() {
console.log(`${this.name} is walking ...`);
}
};
function Animal(name){
return Object.assign(Object.create(animalProto), { name });
}
const a = new Animal('foo');
a.walk();
But this is strange, can you do it the normal way and assign to a property of this
instead?
function Animal(name){
this.name = name;
}
Animal.prototype.walk = function () {
console.log(`${this.name} is walking ...`);
}
const a = new Animal('foo');
a.walk();
or if you want to avoid listing name
twice
function Animal(name){
Object.assign(this, { name });
}
Animal.prototype.walk = function () {
console.log(`${this.name} is walking ...`);
}
const a = new Animal('foo');
a.walk();