为什么要在这里使用箭头函数而不是类或对象构造函数?

时间:2019-03-31 01:07:12

标签: javascript

我正在做一个小项目,主要是为了帮助自己学习JavaScript,而且我对某人的建议有疑问。

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

这是我的方法及其背后的推理。我正在使用一个类来定义对象(我很确定这是我正在做的事情),这样我可以为这些类/对象创建函数来执行操作。像在Player类上一样,我然后可以创建管理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课程产品),所以我不太熟悉它们。

我们非常感谢您的帮助,如果这不是一个好问题,或者已经得到答复,我深表歉意。谢谢!

2 个答案:

答案 0 :(得分:2)

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

public ICommand OpenPopupCommand
{
    get
    {
        return new Command<Story>((x) => 
        {
            // x is Story type
        });
    }
}

阅读它的人会更清楚。箭头语法只是不编写“功能”的语法糖。但是在这里,创建从主函数返回以供以后调用的嵌套函数对我来说既直观又效率低下,因为缺少任何示例,该函数在编写时会很有用。

答案 1 :(得分:1)

导致在Javascript中不使用Classes

  1. JavaScript中不存在“类”的概念。
    •   

      在ECMAScript 2015中引入的JavaScript类主要是语法糖,而不是JavaScript现有的基于原型的继承。类语法不会向JavaScript引入新的面向对象的继承模型。

  2. 类的概念使事情变得脆弱。原型更好,也很灵活(IMO,尽管我仍会不时使用它们)。
  3. 它引导人们远离功能编程的精髓和力量。
    • 在JS函数中,一等公民。函数式编程就是最大程度地使用函数。有一个名为“继承时优先组成”的概念,在这里我们朝着相反的方向前进,因为“类”表示赞成“继承时优先于组成”。