为什么要在JavaScript OOP中使用它

Why use this in JavaScript OOP

本文关键字:OOP JavaScript 为什么      更新时间:2023-09-26

以及许多人中,我也对 JS 中的this感到困惑,因为我知道如何在 DOM 中使用 this 但在OOP中无法理解

a = "uff";
function Class1() {
  a = "";
}
function Class2() {
  this.a = "";
}
well = new Class1();
oh   = new Class2();
well.a = "bye";
oh.a = "ok";
console.log(well.a); // output: bye
console.log(oh.a);   // output: ok
console.log(a);      // output: ""

在上面的示例中,是否使用 this 不会影响代码,那么我为什么要使用它以及为什么 a 的最后一个值打印为空? 我将非常感谢你们所有人。

正如评论者所提到的,您正在使用所有全局变量,由于很多原因(主要是围绕意外后果),这些变量并不好。

至于你的问题,你缺少的是这里:

function Class1(){
  a = "";
}

您只需将 a 的全局变量从原来的"uff"重置为 "。

稍后,当您执行以下操作时:

well.a = "bye"

您正在向well实例添加一个名为 a 的新属性,该属性与您设置的全局变量a无关。

不是没有,但你所描述的实际上都不是JavaScript OOP。到目前为止,您使用的只是对象实例及其属性(以及全局变量)。

JavaScript中,this引用其方法是正在运行的对象,或者构造函数当前正在构建的对象。 它不必是用new构造的对象。

var o = {
    f: function() { this.a = 2; }
}
o.a = 1;
o.f();
o.a;
// => 2

"a"为空,因为 Class1 构造函数清除其值。 未声明的变量将是全局变量,全局范围内的a是修改后的变量。