JavaScript - 使用Assign从多个原型继承函数?

时间:2017-09-20 07:23:30

标签: javascript inheritance prototype

问题详情如下。我一直在阅读有关多继承的Mozilla指南,并看到我们可以通过使用call或apply,设置上下文以及手动设置原型来继承其他构造函数原型方法中的方法。

function Person(){
}
function Programmer(){
Person.call(this);
} 
Programmer.prototype = Object.create(Person.prototype);

我们也可以通过调用多个构造函数来进行多重继承,但这只适用于父构造函数中定义的属性。我的问题是,如何正确地从多个原型继承?如果我使用Object.Assign(),如下所示。

function Person(){
}
function Programmer(){
}
function Employee(){
Person.call(this);
Programmer.call(this);
}

Object.assign(Employee.prototype, Person.prototype);
Object.assign(Employee.prototype, Devolper.prototype);

这会将Parent构造函数视为Mixins,对吗?我们不是指向父原型,而是将属性复制到Employee原型中。此外,如果父母具有相同的命名方法,则原型的分配顺序将起作用。我们也不必缩放原型链接。我们也不需要显式设置构造函数。 typeof不起作用,鸭子打字反正更好..仪式?谢谢。

如果我的问题已得到解答,请关闭。如果问题没有意义,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

这一切都是正确的(但继续阅读),除了我认为是问题中的拼写错误:

  • 它是Object.create,而不是Object.Create
  • 它是Object.assign,而不是Object.Assign
  • 您可能打算在第二次通话中使用Programmer.prototype

您也可以在一个电话中完成:

Object.assign(Employee.prototype, Person.prototype, Programmer.prototype);

但是,是的,使用Person.prototypeProgrammer.prototype作为mixins。