我读过一些关于V8隐藏类的文章。不过,我仍然有我的头几个问题:清除V8的隐藏类概念
如果,比方说,有两个对象:
var a = { }
a.x = 5
a.y = 6
var b = { }
b.y = 7
b.x = 8
难道他们结束了同一个隐藏类或分开只是因为一个人去0 + x + y
和另一个0 + y + x
?据我了解,他们得到不同的班,但只是想确保我得到了它。
然后,我们有这样的情况:
function Point(x, y) {
this.x = x
this.y = y
}
var a = new Point(7, 8)
var b = { }
b.x = 6
b.y = 8
var c = {
x: 8,
y: 9
}
var d = {
y: 9,
x: 80
}
难道我们结束了同一个隐藏类?我可能猜到a
,b
和c
做但d
没有。除非在这样的对象表达式上进行了一些排序(类似于针对该类型分析的数组的短声明)。
最后,我们有这样的:
function PointA(x, y) {
this.x = x
this.y = y
}
var a = new PointA(7, 8)
function PointB(x, y) {
this.x = x
this.y = y
}
var b = new PointB(7, 8)
是八九不离十类似第二种情况。除了它们的来源(instanceof...
)不同之外,这些对象似乎相同。但是,那里的对象最终是否有相同的隐藏类?
Javascript没有课程。隐藏的类不是概念,它们是实现的内部细节。除非你想破解v8或其他需要解决类似问题的虚拟机,否则你并不在意。 –
我其实关心我写的代码的性能。我经历过我自己,当你走的时候关心表现*而不是在有人抱怨跑步速度太慢时关心它会更简单。 – Pijusn
有些方面的表现,你确实需要关心,因为你去。就像选择最佳算法一样,缓存你经常需要的数据等等。但是如果你真的需要关心这个级别的性能,那么你不应该首先使用JavaScript。 –