Javascript 为什么对象使用哈希表而不是仅仅使用';类别';
我来自Python,对JS非常在行。到目前为止,除了对象声明之外,一切都很简单。使用键值对创建对象看起来非常麻烦和混乱 这有什么意义 编辑: 我对javascript对象的想法如下:Javascript 为什么对象使用哈希表而不是仅仅使用';类别';,javascript,Javascript,我来自Python,对JS非常在行。到目前为止,除了对象声明之外,一切都很简单。使用键值对创建对象看起来非常麻烦和混乱 这有什么意义 编辑: 我对javascript对象的想法如下: var person = {firstname:"John", lastname:"Doe", age:50, eyecolor:"blue"}; 看起来这只是一个物体的一种形式 [编辑] 使对象关联数组的选择是明确的;可能是因为在某些情况下,可以方便地动态创建对象/结构,而不必遵循预定义的“类” 这种“松散类
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
选择“原型遗传”而不是“经典遗传”是故意的(无论好坏);这只是一种不同的做事方式,各有利弊
见上文@maerics代码。也许你做错了(在js中有几种方法可以获得OO行为)。你能提供一个例子,说明你在js中的意思和Python中的相应代码吗?我指的是这样的东西:my_obj={make_person:person();你对1有把握吗?在许多OO语言中,字段是距离对象开头的一个恒定内存偏移量,因此不需要哈希函数——查找速度更快。您认为他们如何将方法名或字段名映射到偏移量?哈希表只是将一个对象(例如字符串)散列成一个int,然后转换成内存偏移量。好吧,在Ruby或Python等OO语言中,可能在幕后某处有一个类似哈希表的结构(尽管它们很慢,并且使用额外的内存,因此在实现中尽可能避免)。但是在许多OO语言中,如java、C++和我假定C语言,它们将不被使用——偏移量是在编译时计算的。在这些情况下,使用散列、表、映射,不管它叫什么,在很多情况下都会更糟糕。我并没有说他们都使用哈希表。但是散列到内存偏移量是非常相似的。西蒙-这不是关于你所说的技术上是“错”还是“对”!这是一场毫无意义的辩论。我想说的只是,在许多面向对象语言中,访问对象字段的速度要比哈希表查找快得多,而哈希表查找很重要,而且答案不清楚。