Не удается получить доступ к свойству объекта в переменной JavaScript - PullRequest
0 голосов
/ 03 июня 2019

Я боролся некоторое время за помощью.Это действительно странно.Я хочу получить доступ к свойству объекта, но это всегда выдает ошибку:

TypeError: невозможно прочитать шаблон свойства undefined

Но мое приложение работает правильно.Просто есть уведомление, если нет доступа к шаблону undefined

//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 ]

2 голосов
/ 03 июня 2019

Это потому, что вы используете функцию стрелки, которая теряет привязку к login (this, к которому вы обращаетесь, является попыткой доступа к объекту login).Используйте обычную функцию ES5.

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

Как указано в документах :

выражение функции стрелки является синтаксически компактнымальтернатива обычному функциональному выражению , хотя и без собственных привязок к this, arguments, super,или new.target ключевых слов.Выражения функций стрелок плохо подходят в качестве методов, и их нельзя использовать в качестве конструкторов.

0 голосов
/ 03 июня 2019

Я пытался получить доступ со свойством без функции массива

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);
 
    
}
так почему я не могу получить доступ к этому свойству, даже если я не использую функцию "Строки" ??
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...