gpt4 book ai didi

javascript - 如何像本示例中使用工厂函数一样使用 es6 类的组合?

转载 作者:行者123 更新时间:2023-12-01 02:54:37 24 4
gpt4 key购买 nike

(请注意,这不是重复的问题,请参阅下面 @Jeff M 的回答)

我正在尝试理解 es6 类语法。我想以与使用工厂函数的代码相同的方式编写我的类:

示例1:

const barker = (state) => ({
bark: () => console.log("Woof, I am " + state.name)
});

const driver = (state) => ({
drive: () => state.position = state.position + state.speed
});

const murderRobotDog = (name) => {
let state = {
name,
speed: 100,
position: 0
};
return Object.assign({},
barker(state),
driver(state)
);
};

const bruno = murderRobotDog("bruno");
bruno.bark(); // "Woof, I am Bruno"

我使用完全不同的教程中的“类”进行类组合的工作示例如下所示:

示例2:

class Employee {
constructor(firstName, familyName) {
this._firstName = firstName;
this._familyName = familyName;
}

getFullName() {
return `${this._firstName} ${this._familyName}`;
}
}

class Group {
constructor(manager /* : Employee */ ) {
this._manager = manager;
this._managedEmployees = [];
}

addEmployee(employee) {
this._managedEmployees.push(employee);
}
}

我可以理解码合的概念是如何运作的,但这些似乎是非常不同的实现方式。使用工厂的第一个示例似乎是最直观的,但我想使用 es6 类语法(不要担心为什么:)

也许我遗漏了一些东西,而且答案很明显,但是我该如何以最简单的方式使用 es6 类来完成示例 1 中所做的事情呢?谢谢。

最佳答案

我可以看到您正在使用 MPJ 的“组合”示例,因此您需要知道的第一件事是 MPJ got composition completely wrong 。 MPJ 实际上展示的(他没有意识到)是多重继承。这就是为什么有人已经将您的问题标记为可能与另一个多重继承问题重复的原因。

JavaScript 的原型(prototype)链仅支持单继承,并且由于 ES6 类使用原型(prototype)链,因此它们也仅支持单继承。但随着a little trick ,我们仍然可以达到与多重继承相同的效果。

事情会是这样的:

const barker = Sup => class extends Sup {
bark() { console.log("Woof, I am " + this.name) }
}

const driver = Sup => class extends Sup {
drive() { this.position = this.position + this.speed }
};

class murderRobotDog extends driver(barker(Object)) {
constructor(name) {
super();
this.name = name;
this.speed = 100;
this.position = 0;
}
};

const bruno = new murderRobotDog("bruno");
bruno.bark(); // "Woof, I am Bruno"

关于javascript - 如何像本示例中使用工厂函数一样使用 es6 类的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com