原型继承混乱

时间:2018-02-23 18:24:32

标签: javascript inheritance

我希望这会导致“...”,#39;但我未定义。显然没有正确地做某事。有人能告诉我这里我做错了什么吗?

const barker = (state) => {
  return {
    speak: () => console.log(state.sound)
  }
}

const newAnimal = sound => {
  let state = {
    sound
  }
  console.log(state.sound)
  return Object.assign({}, barker(state))
}

console.log(newAnimal("woof").speak())

2 个答案:

答案 0 :(得分:1)

这是你的问题:

speak: () => console.log( state.sound )

barker返回一个带有函数属性speak的Object,它不返回值(又名undefined)。它的类型为() => void,因为console.log不会返回值。

您可以将其更改为:

speak: () => {
    console.log( state.sound );
    return state.sound;
}

甚至只是这个(没有记录):

speak: () => state.sound;

答案 1 :(得分:1)

您的代码完美无缺。它输出'woof'2次(一次来自newAnimal内的console.log,一次内置speak())。你得到了未定义,因为你还输出了speak方法的结果,这是console.log的返回值,它始终是未定义的。