Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Как грамотно написать код простого скрипта (js)?

Приветствую!

Для тренировки, написал скрипт для проверки возраста/пароля пользователя для доступа к какой либо последующей информации.

Вопросы:
1. При запуске скрипта, проходит проверка на возраст, но проверка пароля не происходит, в чем проблема?
2. Что улучшить в скрипте? Как Вы написали бы данный скрипт?
3. Вместо console.log возвращать return true/false?

Спасибо!

function Auth() {

	this.start = function() {
		if(this.checkUserAge()) {
			console.log('Доступ к вводу пароля > успех, возраст подходит...')
			if(this.checkUserPass()) {
				console.log('Доступ к приложению > успех, пароль подошел...')
			} else {
				console.log('Доступ к приложению > ошибка, пароль не подошел...')
			}
		} else {
			console.log('Доступ к вводу пароля > ошибка, возраст не подходит...')
		}
	}

	this.checkUserAge = function() {
		if(this.userAge) {
			if(this.userAge >= 18) {
				console.log('Проверка возраста > успех, возраст подходит...')
			} else {
				console.log('Проверка возраста > ошибка, возраст не подходит...')
			}
		} else {
			console.log('Проверка возраста > ошибка, возраст не указан...')
			this.getUserAge()
			this.checkUserAge()
		}
	}

	this.checkUserPass = function() {
		if(this.userPass) {
			if(this.userPass == 123) {
				console.log('Проверка пароля > успех, пароль подошел...')
			} else {
				console.log('Проверка пароля > ошибка, пароль не подходит...')
			}
		} else {
			console.log('Проверка пароля > ошибка, пароль не указан...')
			this.getUserPass()
			this.checkUserPass()
		}
	}

	this.getUserAge = function() {
		this.userAge = prompt('Количество полных лет?', 0)
		console.log('Данные > пользователь указал свой возраст...')
	}

	this.getUserPass = function() {
		this.userPass = prompt('Ваш пароль?', 0)
		console.log('Данные > пользователь указал пароль...')
	}

}

let auth = new Auth()
auth.start()


UPD: обновил скрипт, добавил return true/false. Выполняет проверку if(this.checkUserAge()), но до проверки if(this.checkUserPass()) не доходит, в чем проблема?
Скрипт

function Auth() {

	this.start = function() {

		// упешно выполняет проверку
		if(this.checkUserAge()) {
			console.log('Доступ к вводу пароля > успех, возраст подходит...')

			// до сюда не доходит...
			if(this.checkUserPass()) {
				console.log('Доступ к приложению > успех, пароль подошел...')

			} else {
				console.log('Доступ к приложению > ошибка, пароль не подошел...')
			}
		} else {
			console.log('Доступ к вводу пароля > ошибка, возраст не подходит...')
		}

	}

	this.checkUserAge = function() {
		if(this.userAge) {
			if(this.userAge >= 18) {
				console.log('Проверка возраста > успех, возраст подходит...')
				return true
			} else {
				console.log('Проверка возраста > ошибка, возраст не подходит...')
				return false
			}
		} else {
			console.log('Проверка возраста > ошибка, возраст не указан...')
			this.getUserAge()
			this.checkUserAge()
			return false
		}
	}

	this.checkUserPass = function() {
		if(this.userPass) {

			if(this.userPass == 123) {
				console.log('Проверка пароля > успех, пароль подошел...')
				return true
			} else {
				console.log('Проверка пароля > ошибка, пароль не подходит...')
				return false
			}
		} else {
			console.log('Проверка пароля > ошибка, пароль не указан...')
			this.getUserPass()
			this.checkUserPass()
			return false
		}
	}

	this.getUserAge = function() {
		this.userAge = prompt('Количество полных лет?', 0)
		console.log('Данные > пользователь указал свой возраст...')
	}

	this.getUserPass = function() {
		this.userPass = prompt('Ваш пароль?', 0)
		console.log('Данные > пользователь указал пароль...')
	}

}

let auth = new Auth()
auth.checkUserAge()

  • Вопрос задан
  • 663 просмотра
Решения вопроса 4
Диалоги запроса – операции асинхронные, поэтому можно наобещать Promise'ами:
const maker = message => new Promise((res, rej) => {
  const v = window.prompt(message);
  if (v.length) res(v);
  else rej(["Пустой ответ", message, v]);
});

const pAge = maker("Введите ваш возраст");

const pPwd = pAge.then(age => {
  if (parseInt(age) > 18) return maker("Введите пароль");
  else return Promise.reject("Возраст не подходит");
});

Promise.all([pAge, pPwd])
.then((age, pwd) => {
  console.log("Получили и норм. возраст и пароль:", age, pwd);
  // пляшем дальше
})
.catch(err => console.error("Что могло пойти не так?", err))
;
Ответ написан
Комментировать
Vlad_IT
@Vlad_IT
Front-end разработчик
Что означает эта строка?
if(this.checkUserAge) {
она означает, что вы делаете проверку, существует ли свойство checkUserAge, а оно является у вас методом, значит условие будет выполняться всегда. Скорее всего, вы хотели написать так
if(this.userAge) {
Ответ написан
shmatuan
@shmatuan
8 year of Web, 5 years of Vue
Вместо console.log возвращать return true/false?

Для функций, которые что-то проверяют в if() - нужно обязательно возвращать return что-то (true/false или в более развёрнутом виде )
console.log просто выводит запись в консоль - её можно оставить.

this.checkUserAge = function() {
    if(this.userAge) {
      if(this.userAge >= 18) {
        console.log('Проверка возраста > успех, возраст подходит...')
        return true;
      } else {
        console.log('Проверка возраста > ошибка, возраст не подходит...')
        return false;
      }
    } else {
      console.log('Проверка возраста > ошибка, возраст не указан...')
      this.getUserAge()
      this.checkUserAge()
    }
  }


По улучшению скрипта - можно вызвать this.getUserAge() в начале функции, перед if(this.userAge) {
Ответ написан
@kova1ev
мне кажется вызывать рекурсивно checkUserAge и checkUserPass, до тех пор пока юзер не введет подходящий возраст и пароль - не очень хорошая идея, но возможно автор так и задумывал. Ну и конечно, в таком варианте check-методы должны возвращать true/false, иначе проверка this.checkUserAge() в this.start всегда undefined
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы