Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么对象使用哈希表而不是仅仅使用';类别';_Javascript - Fatal编程技术网

Javascript 为什么对象使用哈希表而不是仅仅使用';类别';

Javascript 为什么对象使用哈希表而不是仅仅使用';类别';,javascript,Javascript,我来自Python,对JS非常在行。到目前为止,除了对象声明之外,一切都很简单。使用键值对创建对象看起来非常麻烦和混乱 这有什么意义 编辑: 我对javascript对象的想法如下: var person = {firstname:"John", lastname:"Doe", age:50, eyecolor:"blue"}; 看起来这只是一个物体的一种形式 [编辑] 使对象关联数组的选择是明确的;可能是因为在某些情况下,可以方便地动态创建对象/结构,而不必遵循预定义的“类” 这种“松散类

我来自Python,对JS非常在行。到目前为止,除了对象声明之外,一切都很简单。使用键值对创建对象看起来非常麻烦和混乱

这有什么意义

编辑: 我对javascript对象的想法如下:

var person = {firstname:"John", lastname:"Doe", age:50, eyecolor:"blue"}; 

看起来这只是一个物体的一种形式

[编辑]

使对象关联数组的选择是明确的;可能是因为在某些情况下,可以方便地动态创建对象/结构,而不必遵循预定义的“类”

这种“松散类型”还允许您基于对象的属性而不是其类型创建可重用代码

[原件]

到目前为止,除了对象声明之外,一切都很简单。使用键值对创建对象看起来非常麻烦和混乱

我不知道,对我来说似乎很容易

function Person(name, age) {
  this.name = name;
  this.age = age;
}

var joe = new Person('Joe', 10);
joe.name; // => "Joe"
joe.age;  // => 10
选择“原型遗传”而不是“经典遗传”是故意的(无论好坏);这只是一种不同的做事方式,各有利弊

  • 大多数OO语言将对象实现为非常类似于哈希表的东西,js只是将其显式化
  • 与创建类相比,使用键值对是否有更多的不同和工作量?类只是用于在某些变量上创建闭包的函数。这种模式变得很流行,因此人们开始将其烘焙成语言
  • Ecmascript 6包括添加类:

  • 见上文@maerics代码。也许你做错了(在js中有几种方法可以获得OO行为)。

    你能提供一个例子,说明你在js中的意思和Python中的相应代码吗?我指的是这样的东西:my_obj={make_person:person();你对1有把握吗?在许多OO语言中,字段是距离对象开头的一个恒定内存偏移量,因此不需要哈希函数——查找速度更快。您认为他们如何将方法名或字段名映射到偏移量?哈希表只是将一个对象(例如字符串)散列成一个int,然后转换成内存偏移量。好吧,在Ruby或Python等OO语言中,可能在幕后某处有一个类似哈希表的结构(尽管它们很慢,并且使用额外的内存,因此在实现中尽可能避免)。但是在许多OO语言中,如java、C++和我假定C语言,它们将不被使用——偏移量是在编译时计算的。在这些情况下,使用散列、表、映射,不管它叫什么,在很多情况下都会更糟糕。我并没有说他们都使用哈希表。但是散列到内存偏移量是非常相似的。西蒙-这不是关于你所说的技术上是“错”还是“对”!这是一场毫无意义的辩论。我想说的只是,在许多面向对象语言中,访问对象字段的速度要比哈希表查找快得多,而哈希表查找很重要,而且答案不清楚。