Javascript 在不丢失this关键字的情况下对方法进行分组
在下面的代码中,如何获取要绑定到Square的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() 到 使其更具可读性(同时将方法分组在一起) 这似乎是一种倒退。我建议使用。这是目前所有主流浏览器都支持的语法。使用箭头函数
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;
}
}