正在研究这两种语言之间的区别,我想知道为什么我不能在不启动实例的情况下访问JavaScript类中的变量,但我可以在Python中做到这一点

这是我正在谈论的一个例子:

PYTHON CLASS

    class Car: 
       all =[]
       def __init__(self, name):
          self.name = name

          Car.all.append(self)

       def get_car_name(self):
          return self.name
 
        
        
    bmw = Car("BMW")
    mercedez = Car("MERCEDEZ")

    print(Car.all)

运行此代码返回所有汽车的列表(这是我创建的实例) [<100.Car object at 0x0000022D667664E0>, <100.Car object at 0x0000022D66766510>]

JAVASCRIPT Class

    class Car {
      all = [];
      constructor(name, miles) {
      this.name = name;
      this.miles = miles;

      this.all.push(this);
      }
     }

    let ford = new Car("ford", 324);
    let tesla = new Car("tesla", 3433);

    console.log(Car.all);

如果我使用此代码,console.log将返回 undefined

在JavaScript中,如果我想获得所有内容的价值,我必须使用这样的实例

console.log(ford.all);

这将仅返回创建的ford实例 [ Car { all: [Circular *1], name: 'ford', miles: 324 } ]

但在Python中,如果我打印出一个实例,它就会返回这个

print(bmw.all)

[<__main__.Car object at 0x00000199CAF764E0>, <__main__.Car object at 0x00000199CAF76510>]

即使我调用了一个实例的全部,它也会返回创建的两个实例

推荐答案

您需要将其声明为静态,否则就是实例属性:

class Car {
  static all = [];
  constructor(name, miles) {
  this.name = name;
  this.miles = miles;

  Car.all.push(this);
  }
 }

let ford = new Car("ford", 324);
let tesla = new Car("tesla", 3433);

console.log(Car.all);

在Python中,方法外部声明的变量是静态的(不需要static关键字).

Javascript相关问答推荐

如何在Node.js中减go 两个日期和时间?

使脚本兼容于其他YouTube URL格式

JavaScript:循环访问不断变化的数组中的元素

橡皮擦完全让画布变成白色

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

如何在NightWatch.js测试中允许浏览器权限?

如何提取Cypress中文本

为什么从liveWire info js代码传递数组我出现错误?

基于变量切换隐藏文本

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

togglePopover()不打开但不关闭原生HTML popover'

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

将现场录音发送到后端

使用LocaleCompare()进行排序时,首先使用大写字母

在Odoo中如何以编程方式在POS中添加产品

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

使用jQuery find()获取元素的属性

我怎样才能得到一个数组的名字在另一个数组?

为什么我看到的是回复,而不是我的文档?