eol*_*eol 1 javascript inheritance
我正在阅读JavaScript中不同的对象创建方法,而不是使用new和ES6类.一种方法是使用工厂方法/工厂类模式(取自https://medium.com/humans-create-software/factory-functions-in-javascript-video-d38e49802555):
const dog = () => {
const sound = 'woof'
return {
talk: () => console.log(sound)
}
}
const sniffles = dog()
sniffles.talk() // Outputs: "woof"
Run Code Online (Sandbox Code Playgroud)
我如何实现一个类似于Animal或更确切地说我的狗功能可以"继承"的另一个工厂功能?我会将动物对象传递给dog函数并将对象的原型设置为返回传递的动物对象吗?
你会用Object.create:
const animal = () => ({
talk: function() {
console.log(this.sound);
}
});
const dog = () => Object.create(animal(), {
sound: {
value: "woof"
}
});
// or...
const dog2 = () => {
var someDog = Object.create(animal());
someDog.sound = "woof";
return someDog;
};
var someDog = dog();
someDog.talk();
var someDog2 = dog2();
someDog2.talk();Run Code Online (Sandbox Code Playgroud)
顺便说一句,我的观点是你应该使用ES2015 +类/继承并留下自定义工厂的使用,并Object.create在你真正需要的情况下使用它们:
class Animal {
talk() {
return console.log(this.sound);
}
}
class Dog extends Animal {
constructor() {
super();
this.sound = "woof";
}
}
var dog = new Dog();
dog.talk();Run Code Online (Sandbox Code Playgroud)