了解JavaScript中的列表

了解JavaScript中的列表,javascript,Javascript,我正在阅读有说服力的JavaScript,两天来一直在试图理解列表,所以我想我最终会问一个问题。他们在书中给出的例子是: var list = { value: 1, rest: { value: 2, rest: { value: 3, rest: null } } }; 现在我想我理解了这个例子。。。有一个列表对象,它具有value和rest属性。然后,rest具有值和rest等性质。。。然而,我不明白rest是什么,甚至代表什么

我正在阅读有说服力的JavaScript,两天来一直在试图理解列表,所以我想我最终会问一个问题。他们在书中给出的例子是:

var list = {
  value: 1,
  rest: {
    value: 2,
    rest: {
      value: 3,
      rest: null
    }
  }
};
现在我想我理解了这个例子。。。有一个列表对象,它具有value和rest属性。然后,rest具有值和rest等性质。。。然而,我不明白rest是什么,甚至代表什么。rest属性是否包含对象?那么,list.rest.value会==2吗?这有什么用?我认为这很有用的一些方法是拥有一辆列表车,配备螺旋桨发动机、仪表等,具有加速、制动、低燃油等更多特性。。。这样的事情将如何实现

我为这篇文章的“铺天盖地”道歉,我不知道该问什么,也不知道该怎么表达。这本书似乎只解释了对象和属性,但实际上从未将对象作为对象属性


提前谢谢大家,如果您需要任何澄清或更多信息,我会尽力提供。

这是一个链表的实现。列表中的每个节点都有对下一个节点的引用。'“Rest”是一个对象(列表中的下一个节点),它还包含列表中的每个其他节点(通过其Rest属性)

列表中的第一个值是
list.value。列表中的第二个值是
list.rest.value。列表中的项目可以显示为:

item1=列表;
item2=list.rest;
item3=item2.rest

这将一直持续到
itemX.rest
为空

这两个函数可用于管理列表,并可帮助您了解遍历列表的工作方式:

function addToList(item)
{
    if(!list)
    {
        list = item;
        return;
    }

    var temp = list;
    while(temp.rest)
    {
        temp = temp.rest;
    }
    temp.rest = item;
}

function printList()
{
    var temp = list;
    while (temp)
    {
        print temp.value; //i'm not sure what the javascript print function is
        temp = temp.rest
    }
}

add函数的调用方式如下:
addToList({value:10,rest:null})

在上面的示例中,
列表
变量是一个关联数组。这是JavaScript版本的“对象”。当属性
list.value
最终被键入为整数时,属性
list.rest
被键入为嵌套关联数组。属性本身可以是任何有效类型。许多jQuery插件都是在属性本身实际上是委托函数的情况下编码的


在我看来,您在上面的示例中描述的对象除了作为此类对象如何包含对其他对象的引用的示例之外,并没有太大的用处。然而,当您开始在“面向对象”的概念中应用它时(请记住,它不是真正面向对象的),它会变得更有用。然后,您可以使用属性、函数和委托创建自己的“名称空间”,这些属性、函数和委托可以反复使用。

这段代码只是使用JavaScript对象概念来定义一个名为
list
的对象

// Would simply define an empty object.
var list = {};
现在可以向对象添加一些属性

// Would define an object with a single property: `value`.
var list = {
    value: 1
};
使用嵌套对象声明,还可以给出
列表
对象子对象:

var list = {
    value: 1,
    rest: {}
};
现在
list.rest
是一个空对象。您可以通过添加一些属性来填写:

var list = {
    value: 1,
    rest: {
        value: 2
    }
};
你的筑巢可以无限期地继续下去。在原始帖子中的对象中,可以执行以下操作:

console.log(list.value); // 1
console.log(list.rest.value); // 2
console.log(list.rest.rest.value); // 3

重要的是要理解,这绝不会创建一个类或包含任何附加的对象方法。它似乎是一个链表结构,但不提供添加/删除/修改功能(直接修改原始对象除外)。

谢谢大家提供的信息。我不知道这个网站上是否有最佳答案,但我真的很感谢贾斯汀、乔尔和埃文的帮助。我想我困惑的主要部分只是实际应用。我搞砸了一点,想出了这个,现在有了更好的基本理解:

var-car={
发动机:{
开启:“开启发动机”,
关闭:“关闭发动机”,
描述:{
尺寸:“V6”,
年份:2000年
}
},
燃料:{
级别:55
}
};
功能检查燃油(燃油){
如果(燃油>50){
控制台日志(“状态良好”);
}
否则{
log(“我们应该加油”);
}
}
控制台。日志(汽车。发动机。打开);
控制台。日志(汽车。发动机。关闭);
控制台日志(汽车、发动机、描述尺寸);
控制台日志(汽车发动机描述年份);

检查燃油(汽车、燃油、油位)1s q:)可以包含任何内容…第二个q:)因此,list.rest.value将==2?你试过了吗?显然是的……第三个问题:)取决于您的需求,以及您如何实施……首先。。。此变量的名称为
list
。。这不是一份清单。它是一个JavaScript对象。所以在JavaScript中,对象具有属性。。。属性可以是任何字符串、列表或对象。我不确定这是否真的是列表,但它确实展示了一些面向对象的思想(汽车有发动机和燃料)。我在我的“答案”中添加了一些迭代这个列表结构的例子。