Получить имя объекта в качестве значения этого - PullRequest
2 голосов
/ 09 ноября 2019

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

В своих экспериментах с кодом я использую console.logs для возврата значения this . Возвращаемое значение всегда соответствует ожидаемому, но формат возвращаемого значения противоречив, что заставляет меня задуматься, почему.

Этот код возвращает ожидаемый объект Window для первых 3 команд журнала, которые будут выполнены, но возвращает тольколитерал объекта для 4-й команды, выполненной из метода объекта.

var myName = {
    name: "James",
    sayName: function() {
        console.log(this, 4);
        console.log(this.name)
    }
}

console.log(this, 1);  
function myFunction() {
    console.log(this, 2);
    function nestFunction() {
        console.log(this, 3);
        myName.sayName();
    } 
    nestFunction();
}

myFunction();

У меня 3 вопроса: почему console.log не возвращает имя объекта? Есть ли способ сделать это? Есть ли простой способ сделать это, кроме console.log? Любая помощь будет оценена.

1 Ответ

2 голосов
/ 09 ноября 2019

Хорошо, я просматривал ваш код, чтобы увидеть, что вы конкретно имеете в виду

Вот краткое объяснение того, почему ЭТО отличается в некоторых местах

Это ключевое слово относится к объекту, к которому оно принадлежит. Обычно вы используете его для ссылки на объект глобального окна. Это то, что отражается в журнале вашей консоли 1,2,3.

Вызов this в статическом объекте javaScript вернет объект javaScript, а не объект окна, который отражается в console.log(this,4).

Так что это дает вам возможность вызывать элементы внутри статического объекта. Другой способ понять ключевое слово this - посмотреть на конструкторы. Лучший пример ключевого слова

this

находится внутри функции конструктора

    var myObj = function(){

            function myObj(ref)
            {
                    this.name = "";
                    this.Item = "";
                    this.ref = ref;
                    this.speak();
             }

             myObj.prototype.speak =function()
             {
                     this.name = 'James';
                     this.item = 'cheese';

                     console.log(this.ref)
                     //and the constuctor object
                     console.log(this)
             }

             return myObj;
    }();

    var e = new myObj('a Refrence string');

Это должно дать вам общее представление о том, как это работает

здесь есть дополнительная информация, чтобы вы начали Wschools.com

...