Javascript 工厂功能链表问题
我尝试使用工厂函数的方式实现一个对象,并尝试了一个链表示例,在该示例中,我初始化一个空链表,然后尝试添加节点,在add方法中,如果未设置,则设置头,否则将节点添加到链中的最后一个节点问题是头部似乎从未固定,你知道为什么吗?Javascript 工厂功能链表问题,javascript,Javascript,我尝试使用工厂函数的方式实现一个对象,并尝试了一个链表示例,在该示例中,我初始化一个空链表,然后尝试添加节点,在add方法中,如果未设置,则设置头,否则将节点添加到链中的最后一个节点问题是头部似乎从未固定,你知道为什么吗? "use strict" const niceLog = s => { console.log(JSON.stringify(s, null, 2)) } function linkedList() { let head const node = d
"use strict"
const niceLog = s => {
console.log(JSON.stringify(s, null, 2))
}
function linkedList() {
let head
const node = data => {
return {
data,
next: null
}
}
const add = data => {
if (!head) {
head = node(data)
} else {
const end = node(data)
let n = head
while (n.next) n = n.next
n.next = end
}
}
const del = data => {
let n = head
if (n.data === data) head = head.next
while (n.next) {
if (n.next.data === data) {
n.next = n.next.next
return
}
n = n.next
}
}
return {
head,
add,
del
}
}
const ll = linkedList()
ll.add('cheese')
ll.add('crackers')
ll.add('tea')
ll.add('coffee')
niceLog(ll) // {}
下面是es6类语法中的等效代码,它确实有效(我听说工厂函数更好,因为它们可以避免新的问题,并且这些关键字设置不正确,所以我尝试使用工厂函数)
这篇评论太长了。您似乎对JavaScript中的“工厂函数”感到困惑。factory函数并不意味着您可以避免使用
this
关键字。这确实意味着您要避免使用new
关键字:
let myFactoryPrototype = {
someMethod: function() {
return this.foo;
}
};
let myFactory = () => Object.create(myFactoryPrototype);
let myObject = myFactory(); // no 'new'
请注意规则和箭头函数语法的混合。我在这个
不重要的地方使用了箭头函数,在它重要的地方使用了常规的函数。如果要避免此
,请不要使用方法,请使用对数据类型进行操作的常规(可能是纯)函数:
const addToLinkedList = (list, node) => {
// code return a new list with the extra node goes here
};
但是,实际上,在JavaScript中避免这一点是很困难的,你真的很难做到。另一方面,避免
新建
非常简单,只需使用对象。创建或对象文字。这对于注释来说太长了。您似乎对JavaScript中的“工厂函数”感到困惑。factory函数并不意味着您可以避免使用this
关键字。这确实意味着您要避免使用new
关键字:
let myFactoryPrototype = {
someMethod: function() {
return this.foo;
}
};
let myFactory = () => Object.create(myFactoryPrototype);
let myObject = myFactory(); // no 'new'
请注意规则和箭头函数语法的混合。我在这个
不重要的地方使用了箭头函数,在它重要的地方使用了常规的函数。如果要避免此
,请不要使用方法,请使用对数据类型进行操作的常规(可能是纯)函数:
const addToLinkedList = (list, node) => {
// code return a new list with the extra node goes here
};
但是,实际上,在JavaScript中避免这一点是很困难的,你真的很难做到。另一方面,避免new
非常简单,只需使用Object。创建或Object文本。那么…你的问题是什么?我现在添加了问题部分!那么…你的问题是什么?我现在添加了问题部分!