以下JavaScript代码引发了以下异常
var session = {
encoded : document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1"),
decoded : JSON.parse(atob(encoded))
}
未捕获的ReferenceError:未定义编码
如果我追加这个'编码,然后
var session = {
encoded : document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1"),
decoded : JSON.parse(atob(this.encoded))
}
未捕获的DOMException:无法执行' atob'在' Window'
或者,如果我追加' session',那么
var session = {
encoded : document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1"),
decoded : JSON.parse(atob(session.encoded))
}
未捕获的TypeError:无法读取属性'编码'未定义的
引用其他成员的成员的正确语法是什么?我明白这个'这个'关键字取决于代码的执行位置,但肯定有一种直观的方式来引用 this
修改
这是一个解决方法,只要有人遇到同样的问题(请参阅接受的答案进行解释)
var session = {
encoded : function () { return document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1")},
decoded : function () { return JSON.parse(atob(this.encoded()))}
}
答案 0 :(得分:1)
你做不到。对象创建必须快速,因此不能不稳定。如果属性在创建期间可以相互访问,则可能导致问题。解决方法是一个临时变量:
{
const encoded = document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1");
var session = {
encoded,
decoded : JSON.parse(atob(encoded))
};
}