我努力寻求帮助已经有一段时间了。这真是奇怪。我想访问一个对象属性,但这总是抛出错误:
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);
}
}
答案 0 :(得分:2)
这是因为您使用的箭头功能失去了对login
的绑定(您正在访问的this
是对访问login
对象的尝试)。使用常规的ES5功能。
login.header = async function(req, res, next) {...};
在docs中发现:
箭头函数表达式是常规function expression的句法紧凑形式,尽管没有与
this
,arguments
,{{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);
}