Почему ключевое слово "this" не относится к состоянию, которое я установил? - PullRequest
0 голосов
/ 15 мая 2018

Я начал изучать JavaScript вчера, сегодня я был в теме об объектах и ​​функциях.

Я уже сделал эту работу, но я действительно сомневаюсь, почему в объекте dog1, если я используюпо этому ключевому слову я просто получаю "неопределенное" возвращение в журнал.

Я бы уже искал это здесь и в Google, но без удачи.Я не ищу код для решения этой проблемы, просто чтобы понять, почему во втором случае «this» не работает.

 var dog0 = {
     Name: "Bob",
     color: "Golden",
     breed: "Labrador",
     dogcard1: function() {
        return  "Hi, this is " + this.Name + ", a " + this.color + " " + this.breed ;
     }
 };

 console.log(dog0.dogcard1());


function dogcard(a, b, c) {
    return  "Hi, this is " + a + ", a " + b + " " + c ;
 }

var dog1 = new Object();
dog1.Name = "Suzy";
dog1.color = "black";
dog1.breed = "Bulldog";
dog1.presentation = dogcard(this.Name, dog1.color, dog1.breed);
console.log(dog1.presentation);

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Если вы находитесь в строгом режиме, если это не было определено контекстом выполнения, оно остается "неопределенным".

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

0 голосов
/ 15 мая 2018

Причина, по которой вы получаете undefined назад, заключается в том, что JavaScript не имеет никакой земной подсказки, откуда взялась Name.

В JavaScript вы можете положиться на три области:

  • Область видимости блока (для операторов if, объявлений объектов и циклов),
  • Область действия функции и
  • Глобальная область действия (куда все будет перемещено, если не будет охраняться другими областями).

Если вы вызовете this, вы, вероятно, увидите его привязанным к Window, который фактически является глобальным пространством. Вы не объявляете Name там, что имеет смысл.

Внутри вашего dog1 объекта у вас есть область действия, необходимая для ссылки на непосредственно вложенный объект, поэтому применяется this. Я бы все же не одобрил бы это конкретное использование, хотя - личные предпочтения - и вместо этого передал бы значения, чтобы было кристально ясно, откуда все идет.

Вы вероятно намеревались использовать dog1 вместо this для этой конкретной переменной, поэтому я рекомендую вам исправить эту опечатку.

...