无法访问javascript变量

时间:2019-06-03 03:22:49

标签: javascript node.js object ecmascript-6

我努力寻求帮助已经有一段时间了。这真是奇怪。我想访问一个对象属性,但这总是抛出错误:

  

TypeError:无法读取未定义的属性模板

但是我的应用程序正常工作。如果无法访问未定义的模板,则只有通知输出

//this is my object variabel 
var login = {};

login.data = {
    checkInput : formValidation,
    userSchema : User,
    template   : 'pages/users/login',
}


// so I add new method which I call in different files 
login.header = async(req, res, next) => { 
  /// in this section function I want to read property of template but it always return undefined 
  
  try {
    //  I have some code with read databases here 

    //some data i want to render 
    var data = {};
    res.render(this.data.template,data);
    
    // I've been also trying another way.
    var template = login.data.template !== undefined ?  'page/users/login' : login.data.template;
    
    res.render(login.data.template, data);
    
    // both of above always return output, but can't read template of undefined
    
  } catch(e) {
  
    throw new Error(e);
  }
}

2 个答案:

答案 0 :(得分:2)

这是因为您使用的箭头功能失去了对login的绑定(您正在访问的this是对访问login对象的尝试)。使用常规的ES5功能。

login.header = async function(req, res, next) {...};

docs中发现:

  

箭头函数表达式是常规function expression的句法紧凑形式,尽管没有与thisarguments,{{3 }}或super关键字。箭头函数表达式不适合用作方法,不能用作构造函数。

答案 1 :(得分:0)

我一直在尝试使用没有数组函数的属性

var login = {}
login.data = {
  template : 'admin/pages/'
  body : {}
};

login.getViews = function(req, res, next) {
  // it'l throw an error 
  res.render(this.data.template, this.data.body);
   
  // than i try with another way, it works 
    res.render(login.data.template, login.data.body);
 
    
}
那么,为什么即使我不使用行功能,也无法访问带有属性的内容?