JavaScript访问来自同一对象的另一个成员的对象成员

时间:2017-09-03 14:12:28

标签: javascript

以下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()))}
}

1 个答案:

答案 0 :(得分:1)

你做不到。对象创建必须快速,因此不能不稳定。如果属性在创建期间可以相互访问,则可能导致问题。解决方法是一个临时变量:

{
  const encoded = document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1");
  var session = {
    encoded,
    decoded : JSON.parse(atob(encoded))
  };
}