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的代码中)。更多: