为什么在JavaScript OOP中使用此选项

为什么在JavaScript OOP中使用此选项,javascript,oop,this,Javascript,Oop,This,在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

在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: ""

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

正如评论员所提到的,你们使用的是所有全局变量,由于很多原因(主要是围绕意外后果)这些变量都不太好

关于你的问题,你缺少的是:

function Class1(){
  a = "";
}
您只需将
a
的全局变量从原来的“uff”重置为“”

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

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


并非毫无意义,但您所描述的内容实际上都不是JavaScript OOP。到目前为止,您所使用的都是对象实例及其属性(以及全局变量)。

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

关于你的问题,你缺少的是:

function Class1(){
  a = "";
}
您只需将
a
的全局变量从原来的“uff”重置为“”

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

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


并非毫无意义,但您所描述的内容实际上都不是JavaScript OOP。到目前为止,您所使用的都是对象实例及其属性(以及全局变量)。

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

关于你的问题,你缺少的是:

function Class1(){
  a = "";
}
您只需将
a
的全局变量从原来的“uff”重置为“”

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

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


并非毫无意义,但您所描述的内容实际上都不是JavaScript OOP。到目前为止,您所使用的都是对象实例及其属性(以及全局变量)。

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

关于你的问题,你缺少的是:

function Class1(){
  a = "";
}
您只需将
a
的全局变量从原来的“uff”重置为“”

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

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


并非毫无意义,但您所描述的内容实际上都不是JavaScript OOP。到目前为止,您所使用的都是对象实例及其属性(以及全局变量)。

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

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

o.a = 1;
o.f();
o.a;
// => 2

“a”为空,因为Class1构造函数清除了它的值。未声明的变量将是全局变量,全局范围中的
a
是已修改的变量。

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

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

o.a = 1;
o.f();
o.a;
// => 2

“a”为空,因为Class1构造函数清除了它的值。未声明的变量将是全局变量,全局范围中的
a
是已修改的变量。

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

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

o.a = 1;
o.f();
o.a;
// => 2

“a”为空,因为Class1构造函数清除了它的值。未声明的变量将是全局变量,全局范围中的
a
是已修改的变量。

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

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

o.a = 1;
o.f();
o.a;
// => 2

“a”为空,因为Class1构造函数清除了它的值。未声明的变量将是全局变量,全局范围中的
a
是已修改的变量。

所有变量都是全局变量,这是一种不好的做法
这个
在JavaScript中相当独特,我建议您先在互联网上阅读一些文章。这里有一个很流行的问题,你的所有变量都是全局变量,这是一个糟糕的做法
这个
在JavaScript中相当独特,我建议您先在互联网上阅读一些文章。这里有一个很流行的问题,你的所有变量都是全局变量,这是一个糟糕的做法
这个
在JavaScript中相当独特,我建议您先在互联网上阅读一些文章。这里有一个很流行的问题,你的所有变量都是全局变量,这是一个糟糕的做法
这个
在JavaScript中相当独特,我建议您先在互联网上阅读一些文章。这里有一个很受欢迎的问题需要开始,实际上
这个
指的是你想要它指的任何东西
someOb.someMethod()
只是类似于
(someOb.someMethod | | someOb.prototype.someMethod)的语法糖
注意
someOb
作为
调用的参数。任何对象都可以传入