我一直在关注JS中的链表上的优秀guide。我遇到了一个带有'点'符号的函数,就好像它正在向函数中添加属性或方法一样。我不知道这是如何工作的这是代码片段。 (repl.it link)使用自己的方法创建函数
function List(){
List.makeNode = function(){
return {
data: null,
next: null
};
};
this.start = null;
this.end = null;
this.add = function(data){
if(this.start === null){
this.start = List.makeNode();
this.end = this.start;
} else {
this.end.next = List.makeNode();
this.end = this.end.next;
}
this.end.data = data;
};
}
var list=new List();
我的问题主要是对线路2:
List.makeNode = function(){}
这里是文字描述这行代码是做这一行:
我们还需要一个简单的方法来创建一个节点,并且一种可能的方法是向 提供带有makeNode方法的构造函数List:如果这个 看起来很奇怪,那么记得一个函数也是一个o bject和可以 有方法和属性。这种方法类似于提供 类或静态方法和属性。
我理解构造函数的概念。在我最后一行代码中,调用构造函数List();使用new关键字导致VAR列表包含的对象:
{ start: null,
end: null,
add: [Function]
}
而且,如果我换成“List.makeNode”(在我的名单()构造函数的2线)与“this.makeNode ......”我的变种列表对象我创建将有makeNode功能列表对象的一个方法:
{ makeNode: [Function],
start: null,
end: null,
add: [Function]
}
我理解名单()是最终的目标,并最终从Object.prototype中继承一切。此List()对象/构造函数包含:
{ [Function: List] makeNode: [Function] }
我真的不知道这是如何工作的。
- MakeNode是List对象的属性/方法,它还包含 List Function?
- 为什么我们必须保持makeNode与List关联?
- 将列表更改为“this”并在每个List()的新实例上都有makeNode 函数是一件大事吗?
我很遗憾我们为什么要使用List.makeNode,它存储在哪里,以及它为什么以这种方式实现。
谢谢!
+1,尽管你可以强调一点的是“列表对象” * *是他提到的“列表函数” – Bergi
个人而言,我只是将它作为List构造函数的本地函数。没有明显的理由让它在外部可见。使它成为构造函数的一个属性似乎是出于教学原因无偿地做的事情。我猜想的问题。 – Pointy