Трудно сделать функцию внутри объекта, отображаемого в журнале консоли - PullRequest
3 голосов
/ 14 июля 2020

Я новичок в JS, поэтому извиняюсь за этот, возможно, глупый вопрос. Я изучаю синтаксис конструктора объектов, но не понимаю, почему в журнале консоли не отображается результат функции, являющейся частью этого объекта. Вот код:

var sportsCar = {
    name: "Lamborghini",
    color: "red",
    horsepower: "100mph",
    electric: true, 
    showModelName: function() {
      return(this.name);
      console.log(this.name);
    }
  };

Результат после ввода этого объекта в инструмент разработчика был пустым, когда я думал, что он скажет «Lamborghini». Я подумал о том, чтобы поместить console.log (showModelName) вне объекта, но вспомнил, что функция не имеет глобальной области видимости. Может ли кто-нибудь объяснить, почему в журнале консоли не отображается имя?

Ответы [ 4 ]

3 голосов
/ 14 июля 2020

Не уверен, что именно вы пытаетесь сделать, но похоже, что есть две проблемы: во-первых, вы return перед тем, как регистрировать его, и потому, что вам все еще нужно использовать this.showModelName, а не только showModelName

return(this.name); // nothing after this line will run
console.log(showModelName);

var sportsCar = {
    name: "Lamborghini",
    color: "red",
    horsepower: "100mph",
    electric: true, 
    showModelName: function() {
      console.log(this.showModelName);
      return(this.name);
    }
  };
  
  console.log(sportsCar.showModelName())
1 голос
/ 14 июля 2020
  1. ваша функция не была вызвана, поэтому ничего не будет возвращено. Добавление следующей строки вызовет функцию.

sportsCar.showModelName()

Как упоминалось выше, оператор return завершает выполнение функции. Взгляните на страницу MDN для получения дополнительных разъяснений.

Если вы измените порядок оператора возврата и журнала консоли, вы получите следующее:

Вариант 1 (возвращает Lamborghini и завершает функцию):

showModelName: function() {
      return(this.name);
      console.log(this.name);
    }

Вариант 2 (возвращает Lamborghini 2 раза):

showModelName: function() {
      console.log(this.name);
      return(this.name);
    }
1 голос
/ 14 июля 2020

Ваш console.log должен располагаться над оператором return. Все, что находится ниже оператора return, будет проигнорировано.

Кроме того, основная причина, по которой вы не видите этот оператор, заключается в том, что вы определили функцию. Но не похоже, что вы его вызвали.

попробуйте запустить sportsCar.showModelName() под объектом sportsCar

1 голос
/ 14 июля 2020

Это правильный синтаксис

var sportsCar = {
    name: "Lamborghini",
    color: "red",
    horsepower: "100mph",
    electric: true, 
    showModelName: function() {
      console.log(this.name);
    }
  };

sportsCar.showModelName();
...