【发布时间】:2020-07-30 08:40:30
【问题描述】:
我正在尝试学习 JS/ES,但对类和对象有点困惑。
下面的两个代码sn-ps做的完全一样,但是最后一个明显是使用了一个类。但是第一次使用的是什么?我以为一个类在执行时变成了一个对象?
我原以为clock 是一个函数,但它显然可以用作一个对象。这是为什么呢?
当第一种方式更短时,为什么有人会想要使用类方式?
var clock = {
start() {
setInterval(() => console.log(Date()), 1000)
}
}
clock.start()
和
class Clock {
start() {
setInterval(() => console.log(Date()), 1000)
}
}
const c = new Clock
c.start()
【问题讨论】:
-
现在我们在日常场景中谈到“对象”时,通常指的是其他语言中的“记录”或“字典”,在js中我们称之为“普通对象”。那么为什么
clock是一个普通对象呢?因为你是这样声明的。您将start声明为函数,而不是clock。 -
为什么要使用类,因为你可以
var c1 = new Clock(), c2 = new Clock()并节省时间。 -
请注意,
clock不是函数。它有一个属性start,它是一个函数。但函数是对象,这是一个有用的东西。 -
@sinanspd 是的,但你说得好像这是 JavaScript 特有的问题,其实不是。
-
当 JS 中没有“类”时,我们习惯于将类模拟为一个函数。类函数充当构造函数,然后我们将通过将属性和方法插入到
function_name.prototype中来添加它们。每当您使用new function_name ();时,函数本身就会运行(充当构造函数)并且新对象将继承您附加到原型的属性和方法。直接将“类”声明为对象的事情是模仿“静态”类。您不能使用它来生成实例。现在有一些优雅的方法可以在引擎盖下做同样的事情
标签: javascript node.js ecmascript-2017