我看到许多人在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”只是一种偏好吗?或者,我错过了什么?
答案 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
的情况下阅读和存储所需实例的数据?
您可以使用静态方法并将实例作为参数传递,但这将更加丑陋。