【发布时间】:2020-11-22 20:09:15
【问题描述】:
为了避免复制相同的函数,我听说函数必须在prototype 中定义。而且我听说 OOP 继承很烂,这就是为什么我在深入 Javascript 时尝试使用工厂函数的原因。但是我在下面的代码中有一个问题。我在prototype 中定义了所有函数并创建了两个对象emp 和emp2。但是在定义emp2 之后,emp 的参数会被覆盖。那么工厂函数和原型有什么好处呢?
const eater = (state) => ({
eat(){
console.log(state.name, 'is eating')
}
})
function createEmployee(name, age){
let Employee = Object.create
(createEmployee.prototype)
Employee.name = name
Employee.age = age
Object.assign(
createEmployee.prototype,
eater(Employee)
)
createEmployee.prototype.work = function(){
console.log(Employee.name, 'is working')
}
return Employee
}
let emp = createEmployee('Muzaffer', 24)
emp.work()
emp.eat()
let emp2 = createEmployee('Cuma', 22)
emp.work()
emp.eat()
//Output
//Muzaffer is working
//Muzaffer is eating
//Cuma is working
//Cuma is eating
【问题讨论】:
-
"我听说 OOP 继承很烂" - 你指的是哪种继承形式?他们都是面向对象的。不,如果正常使用,它们不会很糟糕。 “这就是我尝试使用工厂函数的原因” - 这样你就不再使用原型了。我的意思是,您的
createEmployee工厂函数确实使用了原型,但是使用了错误的方式(而eater工厂根本没有使用原型)。为什么不直接使用简单的class语法并尝试了解它在底层做了什么? -
如果你想避免复制函数(这是一个很大的 IF - 如果你喜欢这种方法完全可以),你不能在 inside 中定义任何函数或方法工厂函数。
-
我不是指继承,我听说组合在所有情况下都有效,但类继承却不行。我对 Javascript 感到困惑,它不是类库。为什么我应该使用类语法,为什么不再响应使用类组件?
-
JavaScript 的继承实现可能不是基于类的,但这并不意味着作为抽象结构的类仍然不是一个重要的概念。
Employee绝对是一个有实例的类。这与 React 无关。 -
不同之处在于要共享的原型函数,不能在每次调用工厂时都重新创建。
标签: javascript prototype