为什么在OO JavaScript中使用“this”?

时间:2016-08-13 18:19:05

标签: javascript oop

我看到许多人在JavaScript中面向对象的上下文中使用“this”关键字。类似于在Python和其他一些语言中使用“self”的方式。在面向对象的上下文中,我已经能够通过使用“模块模式”来避免使用“this”。

例如:

var robot = (function() {
    // private variables
    var status = "on";
    var name;

    // private function
    function turnOff() {
        status = "off";
    }

    // public function
    function setName(new_name) {
        name = new_name;
    }

    return {
        setName: setName
    };
})();

或者,这种模式:

var robot = function(robot_name) {
    // private variables
    var status = "on";
    var name = robot_name;

    // private function
    function turnOff() {
        status = "off";
    }

    // public function
    function setName(new_name) {
        name = new_name;
    }

    return {
        setName: setName
    };
};

var FooBot = new robot('Foo');
var BarBot = new robot('Bar');

使用“this”只是一种偏好吗?或者,我错过了什么?

1 个答案:

答案 0 :(得分:3)

不,this不是偏好。 this对于了解调用函数的对象非常有用。

在您的示例中,您不需要此信息,这就是this对您无用的原因。

但是考虑一个具有多个实例的构造函数,每个实例都有自己的关联数据:

class Robot {
  constructor(name) {
    this.status = "on";
    this.setName(name);
  }
  turnOff() {
    this.status = "off";
  }
  setName(new_name) {
    this.name = new_name;
  }
}
var robotFoo = new Robot('foo');
var robotBar = new Robot('bar');

如何在不使用this的情况下阅读和存储所需实例的数据?

您可以使用静态方法并将实例作为参数传递,但这将更加丑陋。