Javascript 将“this”设置为函数的调用者

Javascript 将“this”设置为函数的调用者,javascript,functional-programming,Javascript,Functional Programming,我目前正在做的项目是创建一个跳棋游戏 我使用的是函数构造函数模式,我在其中一个构造函数的原型上设置了一个函数 我的问题是,this关键字指向全局对象,而不是函数的调用者 如何将this设置为函数的调用者 function Piece(x, y, side) {...} Piece.prototype.getPossibleMoves = () => { let possibleMoves = []; console.log(this); // returns glob

我目前正在做的项目是创建一个跳棋游戏

我使用的是函数构造函数模式,我在其中一个构造函数的原型上设置了一个函数

我的问题是,
this
关键字指向全局对象,而不是函数的调用者

如何将
this
设置为函数的调用者

function Piece(x, y, side) {...}

Piece.prototype.getPossibleMoves = () => {

    let possibleMoves = [];

    console.log(this); // returns global object

    if (this.isKing) {
        ...
    } else {
        ...
    }
    return possibleMoves;
}

// Testing

const king = new Piece(5, 5, "bottom");
king.isKing = true;

console.log(king.getPossibleMoves());
这样我想要的功能就会

somePiece.getPossibleMoves()
而不是

Piece.getPossibleMoves(somePiece);
我可以实现它,但更愿意做选项一,因为它感觉更优雅


问题是箭头函数表达式不”(与正则函数表达式和语句的引用方式相同!

Lambda表达式-
()=>{…}
没有它们的
相反,请尝试:

Piece.prototype.getPossibleMoves = function(){ ... 

就像在my中一样,函数按预期工作。

在正常过程中,给定上面的
片段
,在
somePiece.getPossibleMoves()中
在调用过程中,此
将具有
somePiece
所具有的值。因此不清楚问题是什么。请使用演示问题的工具更新您的问题,最好是使用堆栈片段运行的工具(
[]
工具栏按钮;)。如果问题是你提供了
somePiece.getPossibleMoves
作为回调,那么将向你展示如何处理它。@Kaddath:更多的是关于你如何调用
getPossibleMoves
,而不是你是否使用了
new
。你发明轮子时不是在考虑这个库:@GeorgeJempty,如果你想学点什么吗:PYou就是那个人。我忘了ES6函数表达式不像旧表达式那样引用它。非常感谢!:)@TylerTravis说实话,我甚至都不记得了,只是试着从你的问题中复制代码:)如果你没有,没有进一步的问题,请随意标记ANWSERT它们被称为“箭头函数”。lambda表达式是一个不绑定到标识符的函数。箭头函数经常绑定到标识符(或属性)(其他时候通常不绑定;但它们在OP的代码中)。更多: