分组方法而不丢失使用this关键字

时间:2018-11-24 13:01:51

标签: javascript methods this grouping

在以下代码中,如何获取yourModel.currentTime.bind = { [weak self] time in self?.timeLabel.text = time } 关键字以绑定到this

Square

我知道以后可以使用Square.prototype.is = { king: function () { this.piece === "K" } queen: function () { this.piece === "Q" } ... }; / call,但要点是要从中获取

apply

this.isKing()

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

this.is.king()

似乎向后退一步。

2 个答案:

答案 0 :(得分:1)

我建议使用ES6 arrow functions。现在,所有主要浏览器都支持该语法。使用箭头功能使我们可以利用外部范围的https://developer.chrome.com/extensions/manifest

使用this的示例:

Class

如果确定要使用ES5语法:

class Square {
  constructor(){
    this.piece = null;
    this.is = {
      king: () => this.piece === "K",
      queen: () => this.piece === "Q"
    }
  }
};

const square = new Square();
square.piece = 'K';

console.log(square.is.king());
console.log(square.is.queen());

最后,按照@Bergi的评论,这是另一种使用箭头函数和对象而不使用var Square = function Square() { var _this = this; this.piece = null; this.is = { king: function() { return _this.piece === "K" }, queen: function() { return _this.piece === "Q" } }; }; var square = new Square(); square.piece = 'K'; console.log(square.is.king()); console.log(square.is.queen());的方法。

Class

答案 1 :(得分:1)

我知道这并不能直接回答您的问题,但是第三方库中常见的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;
  }
}

假设类型为String。但是它可以在Number中定义的Object充当Enum

我希望您不要考虑这种偏离主题的问题,因为它可以作为考虑其他方式的解决方案:)