为什么我应该使用箭头函数而不是类或对象构造函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我应该使用箭头函数而不是类或对象构造函数?相关的知识,希望对你有一定的参考价值。

我正在开展一个小项目,主要是为了帮助自学javascript,我对某人的建议有疑问。

我的目标是获得一个种族和RPG类的列表,当我创建一个新的角色对象时,我可以为它分配一个竞赛和一个rpg类,它将获得它的属性。

这是我的方法和我背后的推理。我正在使用一个类来定义对象(我很确定我正在做的事情),这样我就可以为那些类/对象创建函数来做事。就像在Player类上一样,我可以创建管理玩家库存的功能。当我实例化一个新玩家时,我可以为它们分配一个竞赛对象和一个rpg类对象。

class Orc {
  constructor() {
    this.mortal = true
  }
}

class Player {
  constructor(race, name, level){
    var inventory = {};
    this.race = race;
    this.name = name;
    this.level = level;
    this.inventory = inventory;
    this.currentCapacity = 0;
    this.maxCapacity = 50;
  }
}

const orc = new Player(new Orc(), 'Baz', 1 )
console.log(orc.race)

这是我建议使用的方法:

const raceTemplates = {
  human: { mortal: true }, 
  elf: { mortal: true }
}

const playerMaker = template => (race, name, level) => {
  return {
    name,
    level,
    race,
    inventory: {},
    currentCapacity: 0,
    maxCapacity: 50,
    ...template[race]
  }
}  

const player = playerMaker(raceTemplates)('elf', 'sammy', 2)
console.log(player) 

我对JavaScript比较陌生,之前我见过箭头函数但是我几乎完全是自学成才,因此有些事情比其他事情更好的理论就是我不知道的地方。我想我理解Arrow函数是什么,但正如我所说,我是JavaScript和自学的新手(通过我使用的工作提供PluralSight课程)所以我对它们不太熟悉。

任何帮助表示赞赏,如果这不是一个好问题,或者已经得到了回答,我表示歉意。谢谢!

答案

当然这是自以为是,但对我来说是一个“经典”的表述:

function playerMaker(template,race,name,level){
...
}

有人读它会更清楚。箭头语法只是不写“函数”的语法糖。但是在这里,创建一个从后面要调用的主函数返回的嵌套函数对我来说似乎既不直观又低效,缺乏任何可以编写的实例。

另一答案

在Javascript中不使用Classes的原因:

  1. JavaScript中不存在“类”的概念。 ECMAScript 2015中引入的JavaScript类主要是基于JavaScript现有基于原型的继承的语法糖。类语法没有向JavaScript引入新的面向对象的继承模型。
  2. 类的概念使事情变得脆弱。原型更好,更灵活(IMO,虽然我仍会不时使用它们)。
  3. 它引导人们远离功能编程的优点和力量。 在JS中,函数是一等公民。函数式编程就是在最大程度上使用函数。有一个概念称为“赞成组合而不是继承”,这里我们正朝着相反的方向前进,因为“类”符号有利于“继承超过构成”。

以上是关于为什么我应该使用箭头函数而不是类或对象构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序--箭头表达式

箭头函数中的this

为啥这里的 String 构造函数应该被保护而不是私有?

vue模板内用箭头函数轻松的增加了第二参数吗?

ES6 箭头函数this指向

为啥不应该使用 Number 作为构造函数? [复制]