我已经注意到localStorage中的一个错误,或者我认为是一个bug,这很难解释,但我会尝试。
我正在写一个简单的本地购物车。为了使事情正常工作,我检查存储是否已经存在,如果不是这样,则将空数组放入其中。
然而,即使在此检查之后,localStorage仍然保持未定义,直到我第二次刷新页面。请参阅以下代码:
const cart = function(name) {
this.storageNamespace = name;
this.get = store.get(this.storageNamespace);
};
cart.prototype.set = function (data) {
store.set(this.storageNamespace, data);
}
cart.prototype.add = function (item) {
if (this.get === undefined) {
store.set(this.storageNamespace, []);
}
let cart = this.get;
if (cart.length !== 0) {
for (let i = 0; i < cart.length; i++) {
if (cart[i].id === item.id) {
cart[i].ammount = Number(cart[i].ammount) + Number(item.ammount);
this.set(cart);
break;
} else if (i === cart.length - 1) {
cart.push(item);
this.set(cart);
break;
}
}
} else {
cart.push(item);
this.set(cart);
}
}
一些事情。是的,this.get返回undefined,我已经从控制台测试了它。因此,我不会理解为什么if语句中的代码没有运行。我把if语句放在几个地方,包括构造函数。到处都是相同的
虽然第二次访问一切正常。
要清楚,即使它似乎评估为true,代码仍然无效:
if (this.get === undefined) {
store.set(this.storageNamespace, []);
}
答案 0 :(得分:1)
const cart = function(name) {
this.storageNamespace = name;
this.get = store.get(this.storageNamespace); /* store.get is function
call, value be will initialized once instance of this function is created */
};
第一次创建此函数的实例时,使用&#34; get&#34; property - undefined已创建,因为您最初在localstorage中没有任何值。
cart.prototype.add = function (item) {
if (this.get === undefined) {
store.set(this.storageNamespace, []); /* Here, you insert value in
localstorage,but object's 'get' property is still undefined,i.e there is
value in localstorage but not in this object's property */
// *** Missed this -> this.get = store.get(this.storageNameSpace)
}
let cart = this.get; /* undefined, hence 'if' is not executed */
if (cart.length !== 0) {
for (let i = 0; i < cart.length; i++) {
if (cart[i].id === item.id) {
cart[i].ammount = Number(cart[i].ammount) + Number(item.ammount);
this.set(cart);
break;
} else if (i === cart.length - 1) {
cart.push(item);
this.set(cart);
break;
}
}
} else {
cart.push(item);
this.set(cart);
}
}