Javascript 在不丢失this关键字的情况下对方法进行分组

Javascript 在不丢失this关键字的情况下对方法进行分组,javascript,methods,this,grouping,Javascript,Methods,This,Grouping,在下面的代码中,如何获取要绑定到Square的this关键字 Square.prototype.is = { king: function () { this.piece === "K" } queen: function () { this.piece === "Q" } ... }; 我知道我以后可以使用调用/应用,但关键是从 this.isKing() 到 使其更具可读性(同时将方法分组在一起) 这似乎是一种倒退。我建议使用。这是目前所有主流浏览器都支持的语法。使用箭头函数

在下面的代码中,如何获取要绑定到Square的
this
关键字

Square.prototype.is = {
  king: function () { this.piece === "K" }
  queen: function () { this.piece === "Q" }
  ...
};
我知道我以后可以使用
调用
/
应用
,但关键是从

this.isKing()

使其更具可读性(同时将方法分组在一起)

这似乎是一种倒退。

我建议使用。这是目前所有主流浏览器都支持的语法。使用箭头函数可以利用外部作用域的
this

使用
的示例:

classsquare{
构造函数(){
this.piece=null;
这是{
国王:()=>this.piece===“K”,
女王:()=>这件作品===“Q”
}
}
};
常数平方=新平方();
方形件='K';
console.log(square.is.king());

console.log(square.is.queen())
我知道这并不能直接回答您的问题,但第三方库中常见的
is
函数通常有以下签名:
is(type)

用这种方式,你可以写:

square.prototype.is = function(type) {
  switch (String(type).toLowerCase()) {
    case "king": return this.piece === "K";
    case "queen": return this.piece === "Q";
    default: return false;
  }
}
假设类型为
字符串
。但它可以是
对象中定义的
数字
,用作
枚举


<>我希望你不要考虑这个话题,因为它可以是一个考虑替代方法的解决方案:

<代码>这个< /代码>是指什么?code>this
指的是一个象棋实例或
this
指的是其他对象?我编辑了我的帖子,有问题的类名为
Square
而不是
Chess
。所有的
this
关键字都指向一个
Square
实例如果你在国王和王后学院都返回
this
,我不太明白你的意思。你是说第一个代码块中的方法?问题是从Square.prototype.isKing=function(){return this.piece==“K”}到Square.prototype.is={king:function(){return this.piece==“K”}改变了
键所指的内容。在第一个示例中,它指的是一个Square实例,在第二个示例中,它指的是Square.prototype.is对象。我可能答错了你的第一个问题,对不起,我有很多方法。我的
classsquare
块将有几百行代码。你仍然建议这样做吗?将定义方法的.prototype方法和类方法相结合是一种选择吗?在这两种方法中,似乎基于ES6类的方法不太详细,尽管它们在长度上非常相似。这根本不需要
class
es,该方法的主要功能是在构造函数的作用域中创建箭头函数。@Bergi true。我添加了一个更简单的方法。还清理了ES5示例…我只是想让您编辑第一句话,从“我建议使用ES6类”到“我建议使用ES6箭头函数”。:-)+1,这是一个比要求更好的解决方案:-)
this.is.king.apply(this)
square.prototype.is = function(type) {
  switch (String(type).toLowerCase()) {
    case "king": return this.piece === "K";
    case "queen": return this.piece === "Q";
    default: return false;
  }
}